Tìm số đảo ngược của một số là một bài tập lập trình cơ bản. Bài tập này giúp các bạn luyện tập tư duy lập trình cũng như khả năng giải quyết các bài toán. Bài tập này có khá nhiều cách tiếp cận khác nhau. Hãy cùng Lập trình không khó đi tìm gợi ý và lời giải cho bài tập này nhé. Show NỘI DUNG BÀI VIẾT Bài toán tìm số đảo ngược của một sốTrong ngôn ngữ lập trình C/C++. Nhập vào một số nguyên dương n từ bàn phím. In ra số đảo ngược của số n vừa nhập. Ví dụ:
Nhận xét bài toán
Ý tưởng tìm số đảo ngượcĐối với số nhỏ, nằm trong phạm vi cho phép có kiểu dữ liệu số. Bạn có thể tìm số đảo ngược của một số sử dụng 1 trong 2 cách sau. Cách 1: Giả sử n = 12345. Khi đó ta có thể viết n = 1*105 + 2*104 + 3*103 + 4*102 + 5*101 Vậy số ngược lại của n = 54321 có thể viết thành 5*105 + 4*104 + 3*103 + 2*102 + 1*101 Nếu bạn để ý, chúng có sự trái ngược nhau. Bạn có thể lợi dụng tính chất này để tìm số đảo ngược. Cách 2: Lấy từng chữ số ở hàng đơn vị và in ra luôn. Ta có thể sử dụng 2 toán tử chia nguyên(/) và chia dư(%) của C/C++. Chẳng hạn n = 12345. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 n = 12345 digit = n % 10 = 5 n = n / 10 = 1234
digit = n % 10 = 4 n = n / 10 = 123
digit = n % 10 = 3 n = n / 10 = 12
digit = n % 10 = 2 n = n / 10 = 1
digit = n % 10 = 1 n = n / 10 = 0 Nếu bạn sử dụng cách này. Bạn cần lưu ý trường hợp có số 0 ở cuối. Vì khi đảo ngược, không cho phép có số 0 ở đầu. Trong trường hợp tổng quát, bạn có thể sử dụng cách 3 này. Cũng rất đơn giản nhé. Cách 3: Đối với số lớn, có hàng nghìn đến hàng triệu ký tự. Khi đó bạn cần dùng string để lưu số này. Tất nhiên bạn vẫn có thể sử dụng cách này với số nhỏ. Khi đó, bài toán khá đơn giản, chỉ cần for ngược từ cuối chuỗi về đầu là xong. Nhưng cần lưu ý số 0 ở cuối nhé! Code bài tập tìm số đảo ngược của 1 sốLưu ý: Các bạn hãy cố gắng tự mình giải quyết bài toán trước khi xem đáp án. Code dưới đây được Nguyễn Văn Hiếu Blog trình bày bằng ngôn ngữ lập trình C++. Cách 1: Code C: 1 2 3 4 5 6 7 8 9 10 11 12 13 #include <stdio.h> int main(){ int n, tmp; scanf("%d", &n); int res = 0; while(n > 0){ tmp = n % 10; res = res * 10 + tmp; n = n / 10; } printf("%d", res); } Code C++: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #include <iostream> using namespace std;
int main(){ int n, tmp; cin >> n; int res = 0; while(n > 0){ tmp = n % 10; res = res * 10 + tmp; n = n / 10; } cout << res; } Giải thích: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 Ví dụ với n = 123450
Check n = 123450 > 0 ? True tmp = n % 10 = 123450 % 10 = 0 res = res * 10 + tmp = 0 * 10 + 0 = 0 n = n / 10 = 123450 / 10 = 12345
Check n = 12345 > 0 ? True tmp = n % 10 = 12345 % 10 = 5 res = res * 10 + tmp = 0 * 10 + 5 = 5 n = n / 10 = 12345 / 10 = 1234
Check n = 1234 > 0 ? True tmp = n % 10 = 1234 % 10 = 4 res = res * 10 + tmp = 5 * 10 + 4 = 54 n = n / 10 = 1234 / 10 = 123
Check n = 123 > 0 ? True tmp = n % 10 = 123 % 10 = 3 res = res * 10 + tmp = 54 * 10 + 3 = 543 n = n / 10 = 123 / 10 = 12
Check n = 12 > 0 ? True tmp = n % 10 = 12 % 10 = 2 res = res * 10 + tmp = 543 * 10 + 2 = 5432 n = n / 10 = 12 / 10 = 1
Check n = 1 > 0 ? True tmp = n % 10 = 1 % 10 = 1 res = res * 10 + tmp = 5432 * 10 + 1 = 54321 n = n / 10 = 1 / 10 = 0
Check n = 1 > 0 ? False Cách 2: Code C: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 #include <stdio.h> int main(){ int n, tmp; scanf("%d", &n); bool first = true; while(n > 0){ tmp = n % 10; if(first == true){ if(tmp != 0){ printf("%d", tmp); first = false; } }else{ printf("%d", tmp); } n = n / 10; } } Code C++: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #include <iostream> using namespace std;
int main(){ int n, tmp; cin >> n; bool first = true; while(n > 0){ tmp = n % 10; if(first == true){ if(tmp != 0){ cout << tmp; first = false; } }else{ cout << tmp; } n = n / 10; } } Giải thích: Ở đây biến Cách 3: Code C++: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 #include <iostream> #include <string> using namespace std;
int main(){ string s; cin >> s; int l = s.length(); if(s[0] == '0'){ cout << "\nSo ban nhap khong hop le!"; return 0; } for(int i = 0; i < l; i++){ if(s[i] > '9' || s[i] < '0'){ cout << "\nSo ban nhap khong hop le!"; return 0; } }
while(s[l-1] == '0') --l;
for(int i = l-1; i >= 0; --i){ cout << s[i]; } } Giải thích: Cách này thực hiện khá là đơn giản. Không cần tính toán phức tạp mà có thể chạy với số cực kỳ lớn. Có thể lên tới hàng triệu chữ số. Lưu ý vì là string nên bạn cần kiểm tra kỹ càng số vừa nhập có hợp lệ không. Số hợp lệ là số không có số 0 ở đầu và chỉ gồm các ký tự số từ ‘0’ đến ‘9’. Bạn có thể chạy thử với một số max lớn xem sao: 1 2 466423621641243213642046127603217462170621062074621762074271604 406172470267126470260126071264712306721640246312342146126324664 Kết luậnNhư vậy, tôi đã kết thúc phần trình bày về bài toán tìm số đảo ngược của một số trên ngôn ngữ lập trình C++. Hi vọng bài viết mang lại cho bạn những kiến thức bổ ích và thú vị. Chúc các bạn học tốt!
Nguyễn Văn Hiếu Sáng lập cộng đồng Lập Trình Không Khó với mong muốn giúp đỡ các bạn trẻ trên con đường trở thành những lập trình viên tương lai. Tất cả những gì tôi viết ra đây chỉ đơn giản là sở thích ghi lại các kiến thức mà tôi tích lũy được. |