【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 }

感想:

反序数的算法可以记下来,老师的算法很简单高效,但是不是那么容易想起;

=

猜你喜欢

转载自www.cnblogs.com/miyazakehime/p/9139233.html
今日推荐