编程序输出1到10000内的所有回文数并统计总个数。

#include<stdio.h>
#include<conio.h>
main()
{
int a,b,c,d,i;
int sum;
sum=0;
printf("1到10000之间的回文数为:\n");
for(i=11;i<=10000;i++)
{
if(i==a*1000+b*100+c*10+d)
{
if((a==b==0&&c==d)||(a=0&&b==d)||(a==d&&b==c)||(a==b==c==d))
{
printf("%d\n",i)
sum++;
printf("1到10000之间的回文总个数为:\n");
printf("%d\n",sum);
}
}
}

getch();
}
为什么总报错呢?

① a,b,c,d都没有定义也没有计算;
② 那个逻辑判断也没有完备, 有漏掉的情况。
③ 给你个完整的代码;
#include <stdio.h>
#include <stdlib.h>

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个。
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-11-23
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)

********

}追问

那个a=i/1000;
b=i%1000/100;
c=i%100/10;
d=i%10;
是什么意思啊?

追答

a,b,c,d分别是千,百,十,个位上的值

相似回答