将数字以单词形式输出(C语言实现)

  程序简单地实现了输入不大于九位的数字,以英文单词的形式输出。

  在小的位数上使用了暴力穷举的方法实现数字转换为单词,使得比较代码冗长……

  基本方法是先将九位数分割成三段分别处理,不足九位,则高位补零。

定义头文件和函数:

1 #include<stdio.h>
2 #include<string.h>
3 #include<stdlib.h>
4 void written_amount(int num,char *buffer);
5 void written_three(int num,char *buffer); 
6 void written_two(int a,char *buffer);

主函数:

int main(void)
{
    int num;
    char *buffer;
    buffer=malloc(sizeof(char *)*200) ;
    printf("Enter the number:");
    scanf("%d",&num);
    written_amount(num,buffer);                
    printf("The %d's homologous string is :\n %s\n",num,buffer); 
    return 0;
}        

write_amount函数:

  先将输入的数字分成三部分,分别赋给num3、num2、num1;例如:输入的是12345,则num3=0;num2=12,num1=345;

  声明三个字符串指针,用来将num1、num2、num3分别转换成字符串后赋给buffer1、buffer2、buffer3.这需要调用written_three函数。

  最后将buffer1、2和3分别判断是否为“zero”,不是的话将它们拼接到一起赋值给buffer。

 1 void written_amount(int num,char *buffer)
 2 {
 3     //分配三个字符串指针,用来接收分别来自num1,num2和num3的字符串
 4      
 5     char *buffer1=NULL,*buffer2=NULL,*buffer3=NULL;
 6     buffer1=malloc(sizeof(char*)*40); 
 7     buffer2=malloc(sizeof(char*)*40);
 8     buffer3=malloc(sizeof(char*)*40);
 9     int count=1;
10     int x=num/10;
11     while(x!=0){
12         count++;
13         x=x/10;
14     }
15 //    printf("%d\n",count); 
16     int num1=0,num2=0,num3=0;
17     //将要转换的数值num以每三位为一组分割给num1,num2,num3  
18     if(count>=1 && count<=3){
19         num1=num;
20     }
21     else if(count>3 && count<=6){
22         num1=num%1000;
23         num2=num/1000;
24     } 
25     else{
26         num1=num%1000;
27         num2=(num/1000)%1000;
28         num3=num/1000000; 
29     } 
30 //调用written_three函数三次,分别将三个数字输出为英语字符形式 
31     written_three(num1,buffer1);
32 
33     written_three(num2,buffer2);
34 
35     written_three(num3,buffer3);
36 //将buffer1、2、3的值copy给buffer,如果为零则忽略 
37     if(!strcmp(buffer3,"zero")) {
38 
39         if(!strcmp(buffer2,"zero")){
40 
41             strcpy(buffer,buffer1); 
42 
43         }
44         else{
45             strcpy(buffer,buffer2);
46             strcat(buffer," thousand and ");
47             strcat(buffer,buffer1); 
48         } 
49     }
50     else{
51         strcpy(buffer,buffer3);
52         strcat(buffer," million and ");
53         strcat(buffer,buffer2);
54         strcat(buffer," thousand and ");
55         strcat(buffer,buffer1); 
56     } 
57     //接收完毕将buffer1、buffer2和buffer3连接起来copy给buffer 
58 } 
written_three函数:
  这个简单的函数用同样的原理,先判断是否满三位数,不满三位,则直接调用write_two函数,否则,先判断最高位,将其转化为字符串buffer,然后和调用write_two函数返回的字符串
拼接,返回结果。
 1 void written_three(int num,char *buffer)
 2 {
 3     int n=num%100;
 4     char *p;
 5     p=malloc(sizeof(char *)*40); 
 6 //    printf("%d\n",n); 
 7     //判断num是否是0,是的话直接返回buffer=NULL,否则判断它的位数,返回对应的英文字符 
 8     if(num/100==0){
 9         written_two(num,buffer); 
10 //        printf("%s\n",buffer); 
11     }
12     else {
13         switch(num/100){
14             case 1:        strcpy(buffer,"one hundred ");        break; 
15             case 2:        strcpy(buffer,"two hundred ");        break;
16             case 3:        strcpy(buffer,"three hundred ");    break;
17             case 4:        strcpy(buffer,"four hundred ");        break;
18             case 5:        strcpy(buffer,"five hundred ");        break;
19             case 6:        strcpy(buffer,"six hundred ");        break;
20             case 7:        strcpy(buffer,"seven hundred ");    break;
21             case 8:        strcpy(buffer,"eight hundred ");    break;
22             case 9:        strcpy(buffer,"nine hundred ");        break;
23         } 
24         written_two(n,p);
25 //        printf("%s\n",p); 
26         strcat(buffer,p); 
27 //        printf("%s\n",buffer); 
28     } 
29 } 

write_two函数(糟糕的穷举法,大神请忽略):

  将二位数转化为对应的字符串。

  1 void written_two(int a,char *buffer)
  2 {
  3     
  4     int count=1,i;
  5     int x=a/10;
  6     while(x!=0){
  7         count++;
  8         x=x/10;
  9     }
 10     switch(count){
 11         case 1:{
 12             switch(a){
 13                 case 0:        strcpy(buffer,"zero");  break;
 14                 case 1:        strcpy(buffer,"one");    break;
 15                 case 2:        strcpy(buffer,"two");    break;
 16                 case 3:        strcpy(buffer,"three");    break;
 17                 case 4:        strcpy(buffer,"four");    break;
 18                 case 5:        strcpy(buffer,"five");    break;
 19                 case 6:        strcpy(buffer,"six");    break;
 20                 case 7:        strcpy(buffer,"seven");    break;
 21                 case 8:        strcpy(buffer,"eight");    break;
 22                 case 9:        strcpy(buffer,"nine");    break;
 23             } 
 24         }break;
 25         case 2:{
 26             if(a%10==0){
 27                 switch(a/10){
 28                     case 1:        strcpy(buffer,"ten");        break; 
 29                     case 2:        strcpy(buffer,"twenty");    break;
 30                     case 3:        strcpy(buffer,"thirty");    break;
 31                     case 4:        strcpy(buffer,"fourty");    break;
 32                     case 5:        strcpy(buffer,"fifty");        break;
 33                     case 6:        strcpy(buffer,"sixty");        break;
 34                     case 7:        strcpy(buffer,"seventy");    break;
 35                     case 8:        strcpy(buffer,"eighty");    break;
 36                     case 9:        strcpy(buffer,"ninety");    break;
 37                 } 
 38             }
 39             else if(a/10==1){
 40                 switch(a%10){
 41                     case 1:        strcpy(buffer,"eleven");    break;
 42                     case 2:        strcpy(buffer,"twelve");    break;
 43                     case 3:        strcpy(buffer,"thirteen");    break;
 44                     case 4:        strcpy(buffer,"fourteen");    break;
 45                     case 5:        strcpy(buffer,"fifteen");    break;
 46                     case 6:        strcpy(buffer,"sixteen");    break;
 47                     case 7:        strcpy(buffer,"seventeen");    break;
 48                     case 8:        strcpy(buffer,"eighteen");    break;
 49                     case 9:        strcpy(buffer,"nineteen");    break;
 50                 } 
 51             }
 52             else {
 53                 switch(a/10){
 54                     case 2:{
 55                         switch(a%10){
 56                             case 1:strcpy(buffer,"twenty-one");            break;
 57                             case 2:strcpy(buffer,"twenty-two");            break;
 58                             case 3:strcpy(buffer,"twenty-three");        break;
 59                             case 4:strcpy(buffer,"twenty-four");        break;
 60                             case 5:strcpy(buffer,"twenty-five");        break;
 61                             case 6:strcpy(buffer,"twenty-six");            break;
 62                             case 7:strcpy(buffer,"twenty-seven");        break;
 63                             case 8:strcpy(buffer,"twenty-eight");        break;
 64                             case 9:strcpy(buffer,"twenty-nine");        break; 
 65                         } 
 66                     }break;
 67                     case 3:{
 68                         switch(a%10){
 69                             case 1:strcpy(buffer,"thirty-one");            break;
 70                             case 2:strcpy(buffer,"thirty-two");            break;
 71                             case 3:strcpy(buffer,"thirty-three");        break;
 72                             case 4:strcpy(buffer,"thirty-four");        break;
 73                             case 5:strcpy(buffer,"thirty-five");        break;
 74                             case 6:strcpy(buffer,"thirty-six");            break;
 75                             case 7:strcpy(buffer,"thirty-seven");        break;
 76                             case 8:strcpy(buffer,"thirty-eight");        break;
 77                             case 9:strcpy(buffer,"thirty-nine");        break; 
 78                         } 
 79                     } break;
 80                     case 4:{
 81                         switch(a%10){
 82                             case 1:strcpy(buffer,"fourty-one");            break;
 83                             case 2:strcpy(buffer,"fourty-two");            break;
 84                             case 3:strcpy(buffer,"fourty-three");        break;
 85                             case 4:strcpy(buffer,"fourty-four");        break;
 86                             case 5:strcpy(buffer,"fourty-five");        break;
 87                             case 6:strcpy(buffer,"fourty-six");            break;
 88                             case 7:strcpy(buffer,"fourty-seven");        break;
 89                             case 8:strcpy(buffer,"fourty-eight");        break;
 90                             case 9:strcpy(buffer,"fourty-nine");        break; 
 91                         } 
 92                     }break;
 93                     case 5:{
 94                         switch(a%10){
 95                             case 1:strcpy(buffer,"fifty-one");            break;
 96                             case 2:strcpy(buffer,"fifty-two");            break;
 97                             case 3:strcpy(buffer,"fifty-three");        break;
 98                             case 4:strcpy(buffer,"fifty-four");              break;
 99                             case 5:strcpy(buffer,"fifty-five");            break;
100                             case 6:strcpy(buffer,"fifty-six");            break;
101                             case 7:strcpy(buffer,"fifty-seven");        break;
102                             case 8:strcpy(buffer,"fifty-eight");        break;
103                             case 9:strcpy(buffer,"fifty-nine");            break; 
104                         } 
105                     }break;
106                     case 6:{
107                         switch(a%10){
108                             case 1:strcpy(buffer,"sixty-one");            break;
109                             case 2:strcpy(buffer,"sixty-two");            break;
110                             case 3:strcpy(buffer,"sixty-three");        break;
111                             case 4:strcpy(buffer,"sixty-four");              break;
112                             case 5:strcpy(buffer,"sixty-five");            break;
113                             case 6:strcpy(buffer,"sixty-six");            break;
114                             case 7:strcpy(buffer,"sixty-seven");        break;
115                             case 8:strcpy(buffer,"sixty-eight");        break;
116                             case 9:strcpy(buffer,"sixty-nine");            break; 
117                         } 
118                     }break;
119                     case 7:{
120                         switch(a%10){
121                             case 1:strcpy(buffer,"seventy-one");        break;
122                             case 2:strcpy(buffer,"seventy-two");        break;
123                             case 3:strcpy(buffer,"seventy-three");        break;
124                             case 4:strcpy(buffer,"seventy-four");         break;
125                             case 5:strcpy(buffer,"seventy-five");        break;
126                             case 6:strcpy(buffer,"seventy-six");        break;
127                             case 7:strcpy(buffer,"seventy-seven");        break;
128                             case 8:strcpy(buffer,"seventy-eight");        break;
129                             case 9:strcpy(buffer,"seventy-nine");        break; 
130                         } 
131                     }break;
132                     case 8:{
133                         switch(a%10){
134                             case 1:strcpy(buffer,"eighty-one");            break;
135                             case 2:strcpy(buffer,"eighty-two");            break;
136                             case 3:strcpy(buffer,"eighty-three");        break;
137                             case 4:strcpy(buffer,"eighty-four");         break;
138                             case 5:strcpy(buffer,"eighty-five");        break;
139                             case 6:strcpy(buffer,"eighty-six");            break;
140                             case 7:strcpy(buffer,"eighty-seven");        break;
141                             case 8:strcpy(buffer,"eighty-eight");        break;
142                             case 9:strcpy(buffer,"eighty-nine");        break; 
143                         } 
144                     }break;
145                     case 9:{
146                         switch(a%10){
147                             case 1:strcpy(buffer,"ninety-one");            break;
148                             case 2:strcpy(buffer,"ninety-two");            break;
149                             case 3:strcpy(buffer,"ninety-three");        break;
150                             case 4:strcpy(buffer,"ninety-four");         break;
151                             case 5:strcpy(buffer,"ninety-five");        break;
152                             case 6:strcpy(buffer,"ninety-six");            break;
153                             case 7:strcpy(buffer,"ninety-seven");        break;
154                             case 8:strcpy(buffer,"ninety-eight");        break;
155                             case 9:strcpy(buffer,"ninety-nine");        break; 
156                         } 
157                     }break;
158                 } 
159             } 
160         }break;
161         default:printf("ERROR!"); exit(EXIT_FAILURE); 
162     } 
163 }

  该程序冗长且杂乱,很多处代码相同,不过总算是实现了简单的功能。

  程序在devcpp上运行通过。

                                                               2016-10-21    11:12:23
posted @ 2016-10-21 13:00  dtdyq  阅读(2761)  评论(0编辑  收藏  举报