100c之21:4位反序数

100c之21:4位反序数

100c之21:4位反序数

Table of Contents

1 问题

设n是一个四位数,它的9倍恰好是其反序数。反序数就是将整数的数字倒过来形成的整数,比如1234的反序数是4321

2 分析

穷举法,穷举范围从1000到1111即可。因为大于1111的四位数乘以九得到的是个五位数,所以最大的穷举数为1111,另外从1000到1111尾数为0的不用考虑

3 解决方案

 1:  /**
 2:   * @file   021fourdigitinversal.c
 3:   * @author Chaolong Zhang <emacsun@163.com>
 4:   * @date   Tue May 21 18:44:31 2013
 5:   * 
 6:   * @brief  设n是一个四位数,它的9倍恰好是其反序数。反序数就是将整数的数字倒过来形成的整数,比如1234的反序数是4321
 7:   * 
 8:   * 
 9:   */
10:  
11:  #include <stdio.h>
12:  
13:  int main(int argc, char *argv[])
14:  {
15:    int n;
16:    for (n=1000; n <=1111; ++n)
17:      {
18:        if (0 == n%10 ) continue;
19:        else if (n*9 == ((n%10) * 1000 + ((n/10)%10) *100 + ((n/100)%10)*10 + n/1000) )
20:          {
21:            printf ("the inverse number of %d is %d\n",n, n*9);
22:          }
23:      }
24:    return 0;
25:  }

发现if的判断过程计算步骤太多,可以采用注意计算四个数字的方法诸位对比,只要一位对比补上就不用再比较下去,这样可以减少计算次数。于是,对程序的一点改进。

 1:  /**
 2:   * @file   021fourdigitinversal.c
 3:   * @author Chaolong Zhang <emacsun@163.com>
 4:   * @date   Tue May 21 18:44:31 2013
 5:   * 
 6:   * @brief  设n是一个四位数,它的9倍恰好是其反序数。反序数就是将整数的数字倒过来形成的整数,比如1234的反序数是4321
 7:   * 
 8:   * 
 9:   */
10:  
11:  #include <stdio.h>
12:  
13:  int main(int argc, char *argv[])
14:  {
15:    int n;
16:    for (n=1000; n <=1111; ++n)
17:      {
18:        if (0 == n%10 ) continue;
19:        else if ( n/1000 == n*9%10 && n/100%10 == n*9/10%10 && n/10%10 == n*9/100%10 && n%10 == n*9/1000 )
20:          {
21:            printf ("the inverse number of %d is %d\n",n, n*9);
22:          }
23:      }
24:    return 0;
25:  }

Date: 2013-05-21 18:54

Author: emacsun

Org version 7.8.02 with Emacs version 23

Validate XHTML 1.0
posted @ 2013-05-21 18:58  emacsun  阅读(491)  评论(0编辑  收藏  举报