黑马程序员技术交流社区
标题:
分享代码 求回文数
[打印本页]
作者:
qq6937523
时间:
2016-4-1 08:58
标题:
分享代码 求回文数
/**
* 如果一个整数从左/右来读都是一样的,则成为回文式数比如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;
}
复制代码
作者:
x_starry
时间:
2016-4-4 16:02
牛犇犇啊
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2