程序代码:
#include<stdio.h>
int main() {
int a,i;
printf("输入一个整数:");
scanf("%d",&a); //假设输入321
int s=0;
for(i=1; i<=a; i*=10) {
s=a%(10*i)/i + 10*s; //大家帮我看看这一行代码 要是反着验证我能看懂 但我不知道如果从上先往下写这个是怎么想出来的 求助
/*
回文数是指正序(从左到右)读和倒序(从右到左)读都是一样的整数。
第一次循环 s=a%(10*i)/i + 10*s;(输入a = 321)
321%(10*i) (i=1)保留原数个位 为1
1/1 +10 *0 = 1 得到最高位数为1
s = 1 即反过来的数的百位为 1
第二次循环
321%(10*i) (i=10)保留原数十位个位 为21
21 / 10 得到的是原来十位的数 (反过来的数的十位)= 2
2 + 10*s(s=1) = 12 (加上百位)
s = 12 即反过来的数的百位和十位为12
第三次循环
321%(10*i) (i=100) 保留原数百位十位个位 为321
321 / 100 = 1 得到的是百位的数(反过来的数的个位)
1 + 10*s (s=12) = 123 (加上百位十位)
s = 123 即反过来的数的百位和十位和个位的数为123
跳出循环
s=123
*/
}
if(a==s)
printf("这个数是回文数\n");
else
printf("这个数不是回文数\n");
return 0;
}
[此贴子已经被作者于2021-4-11 11:54编辑过]