Làm cách nào để kiểm tra xem một số có phải là số có 4 chữ số C++ không?
Trong hướng dẫn nhanh này, chúng ta sẽ khám phá các cách khác nhau để lấy số chữ số trong một Số nguyên trong Java Show
Chúng tôi cũng sẽ phân tích các phương pháp khác nhau để tìm ra thuật toán nào phù hợp nhất với từng tình huống đọc thêmCách làm tròn một số thành N chữ số thập phân trong JavaTổng quan về một số cách xử lý vấn đề chung về làm tròn số thập phân trong Java Đọc thêm → Kiểm tra xem một chuỗi có phải là số trong Java khôngKhám phá các cách khác nhau để xác định xem một Chuỗi có phải là số hay không Đọc thêm → Hướng dẫn thực hành về DecimalFormatKhám phá lớp DecimalFormat của Java cùng với các ứng dụng thực tế của nó Đọc thêm → 2. Số chữ số trong một số nguyênĐối với các phương pháp được thảo luận ở đây, chúng tôi chỉ xem xét các số nguyên dương. Nếu chúng tôi mong đợi bất kỳ đầu vào tiêu cực nào, thì trước tiên chúng tôi có thể sử dụng Math. abs(số) trước khi sử dụng bất kỳ phương pháp nào trong số này 2. 1. Giải pháp dựa trên chuỗiCó lẽ cách dễ nhất để lấy số chữ số trong một Số nguyên là chuyển đổi nó thành Chuỗi và gọi phương thức length(). Điều này sẽ trả về độ dài của biểu diễn Chuỗi của số của chúng tôi
Tuy nhiên, đây có thể là một cách tiếp cận không tối ưu, vì câu lệnh này liên quan đến việc cấp phát bộ nhớ cho một Chuỗi cho mỗi lần đánh giá. JVM phải phân tích cú pháp số của chúng ta và sao chép các chữ số của nó thành một Chuỗi riêng biệt, cũng như thực hiện một số thao tác khác (như giữ các bản sao tạm thời, xử lý các chuyển đổi Unicode, v.v.) Nếu chúng tôi chỉ có một vài con số để đánh giá, thì chúng tôi có thể sử dụng giải pháp này vì sự khác biệt giữa cách tiếp cận này và bất kỳ cách tiếp cận nào khác sẽ không đáng kể, ngay cả đối với số lượng lớn 2. 2. Phương pháp logaritĐối với các số biểu diễn ở dạng thập phân, nếu lấy nhật ký của chúng ở cơ số 10 rồi làm tròn lên, ta sẽ được số chữ số của số đó
Lưu ý rằng log100 của bất kỳ số nào không được xác định, vì vậy nếu chúng tôi mong đợi bất kỳ đầu vào nào có giá trị 0, thì chúng tôi cũng có thể kiểm tra số đó Phương pháp logarit nhanh hơn đáng kể so với phương pháp dựa trên Chuỗi, vì nó không phải trải qua bất kỳ quá trình chuyển đổi dữ liệu nào. Nó chỉ liên quan đến một phép tính đơn giản, dễ hiểu mà không có bất kỳ vòng lặp hoặc khởi tạo đối tượng bổ sung nào 2. 3. phép nhân lặp đi lặp lạiTrong phương pháp này, chúng tôi sẽ lấy một biến tạm thời (được khởi tạo thành 1) và liên tục nhân nó với 10 cho đến khi nó lớn hơn số của chúng tôi. Trong quá trình này, chúng tôi cũng sẽ sử dụng biến độ dài, biến này sẽ theo dõi độ dài của số
Trong mã này, temp *= 10 giống như viết temp = (temp << 3) + (temp << 1). Vì phép nhân thường là một thao tác tốn kém hơn trên một số bộ xử lý so với toán tử ca, nên thao tác sau có thể hiệu quả hơn một chút 2. 4. Chia Với Quyền Hạn của HaiNếu chúng tôi biết phạm vi số của mình, thì chúng tôi có thể sử dụng một biến thể sẽ làm giảm thêm các phép so sánh của chúng tôi. Phương pháp này chia số cho lũy thừa của hai (e. g. 1, 2, 4, 8, v.v. )
Nó lợi dụng thực tế là bất kỳ số nào cũng có thể được biểu diễn bằng phép cộng các lũy thừa của 2. Ví dụ: 15 có thể được biểu diễn dưới dạng 8+4+2+1, tất cả đều là lũy thừa của 2 Đối với số có 15 chữ số, chúng tôi sẽ thực hiện 15 phép so sánh trong phương pháp trước đây, so với chỉ 4 phép so sánh trong phương pháp này 2. 5. Phân chia và chinh phụcĐây có lẽ là cách tiếp cận cồng kềnh nhất khi so sánh với tất cả những cách khác được mô tả ở đây; Chúng ta có thể nhận được câu trả lời chỉ trong ba hoặc bốn câu lệnh if đơn giản
Tương tự như cách tiếp cận trước, chúng tôi chỉ có thể sử dụng phương pháp này nếu chúng tôi biết phạm vi số của chúng tôi 3. điểm chuẩnBây giờ chúng ta đã hiểu rõ về các giải pháp tiềm năng, hãy thực hiện một số phép đo điểm chuẩn đơn giản cho các phương pháp của chúng ta bằng Java Microbenchmark Harness (JMH) Bảng sau đây cho biết thời gian xử lý trung bình của mỗi thao tác (tính bằng nano giây)
Giải pháp dựa trên Chuỗi, đơn giản nhất, cũng là hoạt động tốn kém nhất, vì đây là giải pháp duy nhất yêu cầu chuyển đổi dữ liệu và khởi tạo các đối tượng mới Phương pháp logarit hiệu quả hơn đáng kể so với giải pháp trước đó vì nó không liên quan đến bất kỳ chuyển đổi dữ liệu nào. Ngoài ra, là một giải pháp dòng đơn, nó có thể là một giải pháp thay thế tốt cho phương pháp dựa trên Chuỗi Phép nhân lặp liên quan đến phép nhân đơn giản theo tỷ lệ với độ dài số; Tuy nhiên, phương pháp tiếp theo tận dụng lợi thế của thực tế là mọi số có thể được biểu diễn bằng lũy thừa của hai (cách tiếp cận tương tự như BCD). Nó giảm cùng một phương trình thành bốn phép chia, do đó, nó thậm chí còn hiệu quả hơn so với trước đây Cuối cùng, như chúng ta có thể suy luận, thuật toán hiệu quả nhất là triển khai Chia để trị dài dòng, đưa ra câu trả lời chỉ trong ba hoặc bốn câu lệnh if đơn giản. Chúng ta có thể sử dụng nó nếu chúng ta có một tập dữ liệu lớn gồm các số cần phân tích 4. Phần kết luậnTrong bài viết ngắn này, chúng tôi đã phác thảo một số cách tìm số chữ số trong một số nguyên và so sánh hiệu quả của từng cách Làm cách nào để kiểm tra xem thứ gì đó có phải là chữ số trong C không?The isdigit(c) là một hàm trong C có thể được sử dụng để kiểm tra xem ký tự được truyền có phải là một chữ số hay không. Nó trả về một giá trị khác 0 nếu đó là một chữ số khác, nó trả về 0. Ví dụ: nó trả về giá trị khác 0 cho '0' đến '9' và 0 cho các giá trị khác. isdigit() được khai báo bên trong ctype.
Làm cách nào để kiểm tra xem một số có 2 chữ số trong C hay không?Chương trình C tìm số có 2 chữ số . Biên tập / Câu trả lời hay nhất trả lời bởi. Piyush Dixit. Thành viên từ tháng 9-2009. Đã trả lời Bật. Ngày 18 tháng 9 năm 2009. main() { int num,sum,i; Làm thế nào để đảo ngược một số có bốn chữ số trong C?Đảo ngược một số trong C
. Bước 1. Nhân rev_num với 10 và thêm chữ số mà chúng tôi đã trích xuất từ đầu vào . Bước 2. Cân bằng rev_num với kết quả thu được. Sau 4 lần lặp, rev_num chứa 5432, đây là kết quả bắt buộc của chúng tôi.
Làm cách nào để kiểm tra xem chuỗi có phải là số trong C không?Sử dụng phương thức tích hợp isdigit() , mỗi ký tự của chuỗi được kiểm tra. Nếu ký tự chuỗi là một số, nó sẽ in chuỗi đó chứa int. Nếu chuỗi chứa ký tự hoặc bảng chữ cái, nó sẽ in ra chuỗi không chứa int. |