问题描述:
(1)输入一个正整数,输出它的反序数(反序数,即将其所有位的数字反过来。例如,123是321的反序数)
(2)求1000000以内的正整数n,要求9n是n的反序数。
老师的算法
1 #include2 int main() 3 { 4 int n,m,k; 5 for(n=1; n<1000000; n++) 6 { 7 k=n; 8 m=0; //m将为n的反序数 9 while(k>0) 10 { 11 m=m*10+k%10; 12 k=k/10; 13 } 14 if(m==9*n) //n的反序数m等于9n 15 printf("%d ", n); 16 } 17 printf("\n"); 18 return 0; 19 }
笔者的算法
1 #include "stdafx.h" 2 #include3 4 int main() 5 { 6 int i,n, m(0), d(0), sum(0); 7 8 //枚举 9 for (i = 1; i < 1000000; i++)10 {11 //初始化12 n = i;13 d = 0;14 sum = 0;15 //计算位数16 for (; 1; )17 {18 d++;19 if (n / 10 == 0)20 {21 break;22 }23 24 n /= 10;25 }26 27 //初始化28 n = i;29 //计算反序数30 for (; 1; )31 {32 sum += m * pow(10, d);33 m = n % 10;34 d--;35 36 if (n % 10 == 0 && n<10)37 {38 break;39 }40 41 n /= 10;42 }43 44 if (9 * i == sum)45 {46 printf("%d %d %d\n",i,9*i, sum);47 }48 }49 50 return 0;51 }
感想:
反序数的算法可以记下来,老师的算法很简单高效,但是不是那么容易想起;
=