我的解法:
#include <stdio.h>
int main() {
for(int i=1000;i<10000;i++){
int j=9*i;
if(1000<j&&j<10000){
if((i%10==j/1000%10)&&(i/10%10==j/100%10)&&(i/100%10==j/10%10)&&(i/1000%10==j%10))
printf("%d\n",i);
}
}
return 0;
}
优美解法:
#include <stdio.h>
int reverse(int num)
{
int rev = 0;
while (num > 0)
{
rev = rev * 10 + num % 10;
num /= 10;
}
return rev;
}
int main()
{
int N, revN;
for (N = 1000; N < 10000; N++)
{
revN = reverse(N);
if (N * 9 == revN)
{
printf("%d\n", N);
}
}
return 0;
}
学习的点:
反序数函数的写法:num是输入的数,rev是它的反序数(初始化为零)。
while(num>0){
rev=rev*10 + num%10;
num=num/10;
}
e.g. num=1234;
rev 0+4=4 40+3=43 430+2=432 4320+1=4321 num 123 12 1 0 这个代码段看起来很好看,写法可以积累。
讨论的点:
1.我的解法里由于i和9*i是同步取四位比较的,所以j的取值范围要考虑(j只能是四位数),因为也可能出现i=2078,9*i=18702,二者后四位为反序数这种情况。
2.判断一个数是否对称/是回文数,也会用到这个知识。