注册 登录
编程论坛 C语言论坛

判断回文数

qiqicai 发布于 2021-04-11 10:33, 956 次点击
#include<stdio.h>
int main()
{
int a,i;
printf("输入一个整数:");
scanf("%d",&a);
int s=0;
for(i=1;i<=a;i*=10)
{
    s=a%(10*i)/i + 10*s;               -> //大家帮我看看这一行代码 要是反着验证我能看懂 但我不知道如果从上先往下写这个是怎么想出来的  求助
}
if(a==s)
printf("这个数是回文数\n");
else
printf("这个数不是回文数\n");

return 0;

   
   
   
}
1 回复
#2
夏天q2021-04-11 11:52
程序代码:
#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编辑过]

1