PAT Basic Level 1002

题目:

思路:1.输入的数据大小巨大无法用int,double类型保存并且题设要求需要读取每位上的数字所以选择用char数组保存。将其每位相加后用printchn函数打印出。

2.pringchn函数:读入一个数字,我们要先输出的最高位,呢么如何获取他的最高位?例 a = 1234,如何先获取1呢?显然将 a / 1000,呢么如何得到1000呢?

a.    设置mask = 1; 让a不停除以10知道得到0为止,每除以一次10,mask * 10。 a = a / 10 = 123,mask *= 10; a = a / 10 = 12 mask *= 10....

注意最后得到的mask 大一位 a = 1234 ,mask = 10000,最后需要将mask / 10。

b.   得到mask后利用a / mask 得到最高位 ,每次做完 另 a = a%mask,mask /= 10;

重点思考数字中的零和末尾的零是否有影响。

1.在求mask的过程中:即使中间或末尾有零皆不影响,因为只有当a = 0时才停止mask自乘。例:a = 10450, a = 1045 ,a= 104 , a = 10,a = 1,a = 0,

2.在正序取出每位数字时:重点注意结束条件不是 a != 0 而是 mask != 0;例:a = 10000,mask = 10000; a = 10000 / mask = 1, mask /= 10 = 1000;a = 1 / mask = 0,mask /= 10 = 100;a = 0 / mask = 0,mask /= 10 = 10;a = 0 / mask = 0,mask /= 10 = 1; a = 0/mask = 0,mask /= 10 = 0;

AC代码

 1 #include <stdio.h>
 2 void PrintChn(int num)
 3 {
 4     int cnt = 0;
 5     int tempNum = num;
 6     while (tempNum>0)
 7     {
 8         tempNum = tempNum/10;
 9         cnt++;
10     }
11     int i;
12     int mask = 1;
13     for(i = cnt;i > 0;i--)
14     {
15         mask *= 10;
16     }
17     mask = mask/10;
18     while (mask != 0)
19     {
20         int temp = 0;
21         temp = num/mask;
22         num = num % mask;
23         mask = mask/10;
24         switch (temp)
25         {
26             case 0:printf("ling");
27             break;
28             case 1:printf("yi");
29             break;
30             case 2:printf("er");
31             break;
32             case 3:printf("san");
33             break;
34             case 4:printf("si");
35             break;
36             case 5:printf("wu");
37             break;
38             case 6:printf("liu");
39             break;
40             case 7:printf("qi");
41             break;
42             case 8:printf("ba");
43             break;
44             case 9:printf("jiu");
45             break;    
46         }
47         if(mask>0)
48         {
49             printf(" ");
50         }
51     }
52 }
53 int main ()
54 {
55     char box[100]; //define "box"char array for input num;
56     scanf("%s",&box);
57     int temp = 0;
58     int i = 0;
59     while(box[i] != 0)
60     {
61         temp += (int)box[i] - '0';
62         i++;
63      } 
64      PrintChn(temp);
65     return 0 ;
66      
67  } 

 

posted @ 2016-10-18 22:51  Ponytai1  阅读(233)  评论(0编辑  收藏  举报