对称数也就是回文数,即从左到右和从右到左是一样的。
这个是数值拆分问题,把一个数的每位数值单独拿出来,原理是:
1、任何一个数除以10的余数就是该数最后一位
2、任何一个数除以10的商就是排除掉最后一位后的数(因为 c 两个整数相除结果还是整数)。
重复以上步骤,依次得到个位、十位、百位......
下面给一下回数猜想的程序:
回数猜想:
任取一个数,再把它倒过来,并把这两个数相加,然后把这个和数再倒过来,与原和数相加,重复此过程,一定能获得一个回数。例:68倒过来86,68 86=154,154 451=605,605 506=1111(回数)
编程,输入任意整数,按上述方法产生一个回数,为简便起见,最多计算7步,看是否能得到一个回数。
要求:主函数中接收键盘数据,必须用scanf(“%ld”,&变量名)接收整型变量, 显示该数与其倒数的和,输出每一步计算步骤。子函数1,计算该数的倒数。子函数2,验证是否为回数。主函数打印“经过n次计算,得到回数”,超过7次未能得到回数,显示,“经过n次计算,未得到回数”
可以尝试在上面框架自己补充完整。
代码语言:javascript复制#include <stdio.h>
int f2(int b) //求倒数
{ int s=0;
do{
s=s*10 b;
b=b/10;
}while(b!=0);
return s;
}
int f1(int a)
{ int a2;
a2=f2(a);
if(a==a2) return 1;
else return 0;
}
int main()
{ int m,m2,i=0;
printf("回数猜想,任意输入一个整数n");
scanf("%d",&m); // m
for(;i<7;) //循环不大于7次
{ if( f1(m) ) //f1 return =1, 是回数;0不是
{ printf("经过 %d次循环得到回数n",i); break;}
m2=f2(m); //
i ;
printf("循环第%d次:%d %d=%dn",i,m,m2,m m2); // i: m m2=
m=m m2;
}
if(!f1(m)) printf("7次 NO");
return 0; //369476
}