我自己写的一个判断回文数的程序,但遇到了一些问题
/*
判断任意输入的一个整数是否为回文数
思路: 将所输入的数字从个位数开始按顺序分解到数组1,2,3,4...里,
然后将数组的两头进行对比,从而判断其是否为回文数
*/
#include <stdio.h>
#include <conio.h>
#include <math.h>
int main()
{
int a[20]; //数组从1开始,0舍弃
int num,lenth,n,i,b=0,c=0,p;
// n是每一位数所在数组的编号;i用来判断是否为回文数;p用来打印数组进行验证
printf( "请输入一个至少为三位数的数字\n ");
scanf( "%d ",&num);
printf( "请输入%d的位数\n ",num);
scanf( "%d ",&lenth);
while (num <100) /*必须输入一个三位以上的整数*/
{
printf( "请输入一个至少为三位数的数字\n ");
scanf( "%d ",&num);
}
for (n=1;n <=(lenth-1);n++) //分解所输入数除最高位的每一位数
{
a[n]=num%((int)pow(10,n))/(pow(10,n-1));
printf( "a[%d]= %d\n ",n,a[n]); //打印每一位的数字
}
a[lenth]=num/(pow(10,lenth-1)); //读取最高位
printf( "a[%d]= %d\n ",lenth,a[lenth]); //打印最高位
//以下是判断所输入数字是否为回文数
if (lenth%2==0) //为偶数位时
{
for (i=1;i <=(lenth/2);i++)
{
if (a[i]==a[lenth+1-i]) b++;
}
if (b==(lenth/2))
printf( "%d 是回文数 ",num);
else
printf( "%d 不是回文数 ",num);
}
else //为奇数位时
{
for(i=1;i <=((lenth-1)/2);i++)
if (a[i]==a[lenth+1-i]) c++;
if (c==((lenth-1)/2))
printf( "%d 是回文数 ",num);
else
printf( "%d 不是回文数 ",num);
}
getch();
return 0;
}
当我输入1234321时结果如下
请输入一个至少为三位数的数字
1234321
请输入1234321的位数
7
a[1]= 1
a[2]= 8
a[3]= 3
a[4]= 4
a[5]= 3
a[6]= 2
a[7]= 1
1234321 不是回文数
不知为何,还望大家帮忙看看
[解决办法]
1 num 的分解,可以使用 sprintf
2 if (lenth%2==0) //为偶数位时
这里不需要分支,注意如果是 奇数,那么 (b==(lenth/2)) 的时候, 小数0.5是被舍弃的,所以, 不需要 (c==((lenth-1)/2)) 这样的独立判断
[解决办法]
#include <iostream>
using namespace std;
int main()
{
int iInput;
cin> > iInput;
int ilength = 0;
int array[20];
int i = 0;
while (iInput != 0)
{
array[i++] = iInput % 10;
iInput /= 10;
ilength++;
}
int pos = 0;
ilength--;
while (pos <= ilength)
{
if (array[pos] != array[ilength])
break;
pos++;
ilength--;
}
if (pos < ilength)
cout < < "不是 " < <endl;
else
cout < < "是 " < <endl;
return 0;
}
偶的一个 楼住参考.. 你的太混乱了 而且都都用了 pow(10,n)了, 没必要啊...
[解决办法]
改一下吧:【没有环境,自己测试一下, 抱歉了】
#include <stdio.h>
#include <conio.h>
#include <math.h>
int main()
{
char a[20]; //字符串方式
int num,flag=0,i,j;
// flag 是回文数标记, i, j 是辅助变量
printf( "请输入一个至少为三位数的数字\n ");
scanf( "%d ",&num);
printf( "请输入%d的位数\n ",num);
scanf( "%d ",&lenth);
while (num <100) /*必须输入一个三位以上的整数*/
{
printf( "请输入一个至少为三位数的数字\n ");
scanf( "%d ",&num);
}
sprintf(a, "%d ", num);
j= strlen(a)-1;
for(i=0; i <j; i++,j--) if(a[i] != a[j])break;
if (i <j)
printf( "%d 是回文数 ",num);
else
printf( "%d 不是回文数 ",num);
getch();
return 0;
}
[解决办法]
我用 dev c++ 都没问题。。。