首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

求回文数时,输入较大的复杂的数,编译异常

2012-08-11 
求回文数时,输入较大的复杂的数,编译错误//回文数,就是一个数字从前往后和从前往后的值是相等的,例如回文

求回文数时,输入较大的复杂的数,编译错误
//回文数,就是一个数字从前往后和从前往后的值是相等的,例如回文数12321
#include<stdio.h>
#include<math.h>
int main()
{
int i,j=0,p,s,a[]={0};
printf("please input a number:\n");
scanf("%lf",&s);

while(s!=0)
{
a[j]=s%10;
s=s/10;
j++;

}
p=j-1;

double sum=0;
for(i=p;i>=0;i--)
{
sum+=a[i]*(pow(10,p-i));
}
if(sum==s)
{
printf("yes");

}
else {
printf("no");}
return 0;
}










[解决办法]
scanf("%lf",&s);其中s定义的是整型,为什么输入的时候用lf呢??作为double或者float输入么???如果你想搞复杂的话,为什么不用char buff[]来存放数据呢??
[解决办法]
int a[] = {0}, 这种定义数组的方式只能得到可以存储一个整数的空间, 而你后面 a[j] = s%10, j++, 那就一定会发生数组越界
[解决办法]
用不着这么复杂吧,可以直接定义int变量的数,如果还需更大点,就用long呗,程序如下:
#include<stdio.h>

void main()
{
int val,sum,m;
sum=0;
printf("Input the number to judge:");
scanf("%d",&val);
m=val;
while(m)
{
sum=sum*10+m%10;
m=m/10;
}
if(sum==val)
printf("Yes!\n");
else
printf("No!\n");
}
[解决办法]
int i,j=0,p,s,a[]={0};
这句话说明了定义的数组a里面能装一个元素
但是由于编译器并不检查数组越界问题
所以当输入的数比较小,或者说比较短的时候数字都被放在a所占的内存后面的空间,(虽然可以运行,但这是不正确,甚至危险的)
当输入的数字比较长的时候,问题就显而易见的暴露出来了
[解决办法]
完全系统函数搞定,翻转一下字符串,然后看这两个字符串是否相等,四五行就搞定了。

热点排行