- /**
- * 如果一个整数从左/右来读都是一样的,则成为回文式数比如101 32123 999
- 回数猜想:任取一个数再把它倒过来,并把这两个数相加.然后把这个和数再倒过来,与原和数相加,重复此过程,一定能获得一个回数.
-
- *编程 输入任意整数 按上述方法产生一个回数,为方便起见,最多计算7步,看是否能得到一个回数.
- 要求 显示该数与其倒数之和,输出每一步计算步骤
- *
- */
- #include <stdio.h>
- #include <math.h>
- int Daoshu(int n);
- int main()
- {
- //定义一个变量存储输入的整数
- int number = 0;
- //定义一个变量存储输入整数的倒数
- int dNumber = 0;
-
- //提示输入一个整数
- printf("请输入一个正整数:\n");
- scanf("%d",&number);
- //最多7步 看能否得到一个回数
- for (int i =0 ;i < 7 ;i++)
- {
- //通过函数计算 得到倒数
-
- dNumber = Daoshu(number);
-
- //判断是不是回数
- //如果这个数跟他的倒数相同 那么这个数就是回文数
- if (number == dNumber)
- {
- printf("经过%d步的计算,%d这个数是回数\n",i,number);
- break;
- }
- else
- {
- int a = number;
- number = number + dNumber;
- printf("第%d步,得到数字是%d,倒数是%d,和是%d\n",i+1,a,dNumber,number);
- }
-
- if (i == 6)
- {
- printf("经过7步计算 没有得到回文数字\n");
- }
- }
-
- return 0;
- }
- int Daoshu(int n)
- {
- int num = n;
- int i ;
-
- //判读这个数的位数
- for ( i = 1; ; i++)
- {
- num = num /10;
- if (!num)
- {
- break;
- }
-
- }
-
- //重置num的数值
- num = n;
- //清空n的数值
- n = 0;
- //得到倒数
- for (int j = i-1; j >= 0; j--)
- {
- n += (num % 10)*(int)((int)pow(10.0, j));
- num = num / 10;
- }
- return n;
- }
复制代码
|
|