如何求回文数(对称数)

2019-11-19 22:19:24 浏览数 (2)

对称数也就是回文数,即从左到右和从右到左是一样的。

这个是数值拆分问题,把一个数的每位数值单独拿出来,原理是:

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
}

0 人点赞