① a,b,c,d都没有定义也没有计算;
② 那个逻辑判断也没有完备, 有漏掉的情况。
③ 给你个完整的代码;
#include
#include
int main(int argc, char *argv[])
{
unsigned int a, b, c, d;
int i;
int sum;
int flag = 0;
printf("Printing reverse number from 1 to 10000\n");
for (i=1; i <= 10000; i++)
{
flag = 0;
a = i/1000;
b = (i-a*1000)/100;
c = (i-a*1000-b*100)/10;
d = i-a*1000-b*100-c*10;
/* printf("%d=%d, %d, %d, %d\n", i, a, b, c, d); */ /* debug */
if (i < 10) /* single digit */
{
flag = 0;
}
else if (i<100) /* double digits */
{
if (c == d)
flag = 1;
}
else if (i < 1000) /* triple digits */
{
if (b == d)
flag = 1;
}
else /* quadruple digits */
{
if ((a == d) && (b == c))
flag = 1;
}
if (flag) {
printf("%d\n", i);
sum++;
}
}
printf("Sum = %d\n", sum);
return 0;
}
应该输出190个。
i==a*1000+b*100+c*10+d这条语句执行的时候,a,b,c,d的值都没有,当然报错啊。而且你想通过这样求得abcd的值是不可能的
a=i/1000;
b=i%1000/100;
c=i%100/10;
d=i%10;
判断是不是回文数的时候可以这样
if(a==0) //不是四位数
{
if(b==0) //不是三位数
{
if(c==d) //两位数,比较后两位
*******
}
else //是三位数,比较首末两位
{
if(b==d)
*******
}
}
else //是四位数,首末比较,中间比较
{
if(a==d&&b==c)
********
}