回文数
来源:互联网 发布:小程序 app.js 编辑:程序博客网 时间:2024/06/07 02:51
任取一个十进制整数,将其倒过来后与原来整数相加,得到一个新的整数后重复上面步骤,最终可以得到一个回文数。
第一次方案:
#include <stdio.h>
int jud(int a);
int main()
{
int i;
int j1 = 0;
int j2 = 10;
int k;
int k1;
int a[10];
int j3;
int j4;
int j5;
int cont;
printf("input : "); //输入要进行计算的数
scanf("%d", &j3);
while (jud(j3)) //对输入的数/相加的数进行判断是否是回文数
{
j4 = j3;
j5 = j3;
for (cont = 0; j4 != 0; cont++) //判断这个数的位数
j4 /= 10;
for (i = 1, k = 1; i < cont; i++) //得出一个与输入数位数相同的10次方数
k *= 10;
k1 = k;
for (i = 0; i < cont; i++) //将这个数分解为数组的形式
{
a[i] = j5/k1;
j5 %= k1;
k1 /= 10;
}
j1 = j5;
for (i = 0, j2 = 0, k = 1; i < cont; i++) //将输入数倒置
{
j2 += a[i] * k;
k *= 10;
}
j3 = j1 + j2; //将倒过来的数与原数相加得到新的数
printf("%10d + %10d = %10d\n", j1, j2, j3);
}
return 0;
}
int jud(int a) //判断回文数的函数
{
int i;
int k;
int c;
int cont = 0;
int b[10];
int l;
int n;
c = a;
l = a;
for (cont = 0; c != 0; cont++) //判断输入数的位数
c /= 10;
n = cont;
for (i = 1, k = 1; i < cont; i++)
k *= 10;
for (i = 0; i < cont; i++)
{
b[i] = a/k;
a %= k;
k /= 10;
}
for (i = 0, cont = 0; i < n / 2; i++) //将首尾的数组分别比较,判断是否是回文数
{
if (b[i] == b[n - 1 - i])
cont++;
}
if (cont == (n / 2))
{
printf("output : %10d\n", l);
return 0;
}
else
return 1;
}
但是判断函数可以改进
改进之后
long re(long int a) //求输入整数的反序数
{
long int t;
for (t = 0; a > 0; a /= 10) //将整数反序
t = t * 10 + a % 10;
return (t); //返回反序值
}
nonre(long int s) //判断是否为回文数
{
if (re (s) == s) //判断原来值是否与反序值相同,相同返回1,不同返回0
return 1;
else
return 0;
}
阅读全文
0 0
- 回文回文数 HUST
- 回文数&&回文串
- 回文数
- 回文数
- 回文数
- 回文数
- 回文数
- 回文数
- 回文数
- 回文数
- 回文数
- 回文数
- 回文数
- 回文数
- 回文数
- 回文数
- 回文数
- 回文数
- 虚拟地址到物理地址的转换
- CodeForces
- (转)Ubuntu使用教程:E: 无法获得锁 /var/lib/apt/lists/lock
- EOJ 3247 铁路修复计划 (最小生成树+二分)
- HDU 4586 Play the Dice(概率入门)
- 回文数
- String类的两种实例化对象的方式
- R_install.packages("xxx")报错Warning: unable to move temporary installation的解决办法
- POJ 1941 The Sierpinski Fractal
- JAVA-1056. 组合数的和(15)
- C++ 使用vector 出现"vector iterator not incrementable"或"vector iterator + offset out of range"错误的情况
- BZOJ1046: [HAOI2007]上升序列
- Liunx安装JDK及STS
- Android应用分类和安全Domain