【C语言及程序设计】项目1-39-3:反序数
问题描述:
(1)输入一个正整数,输出它的反序数(反序数,即将其所有位的数字反过来。例如,123是321的反序数)
(2)求1000000以内的正整数n,要求9n是n的反序数。
老师的算法
1 #include <stdio.h> 2 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 #include <cmath> 3 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 }
感想:
反序数的算法可以记下来,老师的算法很简单高效,但是不是那么容易想起;
=