1. Số Thuận Nghịch
Số đối xứng hay số thuận nghịch là số mà khi bạn đọc từ trái qua phải hay từ phải qua trái nó đều giống nhau, ví dụ số 12321, 5555, 888, 3, 4....
Để kiểm tra 1 số N có đối xứng hay không bạn thực hiện lật ngược số ban đầu lại để thu được số lật ngược của số ban đầu, sau đó so sánh số ban đầu với số lật ngược của nó nếu giống nhau thì số N là số thuận nghịch
Ví dụ N = 1234 thì lật ngược của N là 4321, 1234 khác 4321 nên N không thuận nghịch
N = 12321 thì lật ngược của N là 12321, 12321 giống 12321 nên N là số thuận nghịch
Code :
#include int thuan_nghich(int n){ int m = 0, tmp = n; while(n != 0){ m = m * 10 + n % 10; // chú ý câu lệnh này n /= 10; } if(tmp == m){ // cần so sánh m với tmp, vì n đã = 0 return 1; } return 0; } int main(){ int n = 12321; if(thuan_nghich(n)){ printf("YES\n"); } else{ printf("NO\n"); } return 0; }
Output :
YES
Giải thích :
- m = 0, n = 12321, m = m * 10 + n % 10 = 0 * 10 + 1 = 1, sau đó n = n / 10 = 1232
- m = 1, n = 1232, m = m * 10 + n % 10 = 1 * 10 + 2 = 12, sau đó n = n / 10 = 123
- m = 12, n = 123, m = m * 10 + n % 10 = 12 * 10 + 3 = 123, sau đó n = n / 10 = 12
- m = 123, n = 12, m = m * 10 + n % 10 = 123 * 10 + 2 = 1232, sau đó n = n / 10 = 1
- m = 1232, n = 1, m = m * 10 + n % 10 = 1232 * 10 + 1 = 12321, sau đó n = n / 10 = 0
- Vòng lặp dừng khi n = 0
- So sánh tmp với m, vì giá trị của n sau vòng lặp while đã bằng 0 rồi nên không thể đem so sánh với m
Vậy mấu chốt để lật ngược được số ban đầu là bạn cần biết cách thêm 1 chữ số vào số hiện tại, ví dụ bạn đang có m = 128 mà bạn muốn bổ sung chữ số 5 vào hàng đơn vị của 128 thì bạn cần nhân 128 với 10 sau đó cộng thêm 5.
Sau này khi bạn học tới chuỗi ký tự bạn có thể giải bài tập này nhanh hơn
Xem thêm video bài giảng của mình về số thuận nghịch để hiểu rõ hơn nhé :