整数翻译成英文

程序效果: 1 #include<iostream>
 2 #include<string>
 3 using namespace std;
 4 
 5 class robot{
 6     string name;
 7     string type;     //型号 
 8 public:
 9     robot(string name = "xxx",string type = "xxx") : name(name),type(type){      //默认构造函数 
10     }
11     void out(int a);        //英文中每三位数读法相同,所以定义out函数翻译小于1000的整数
12     void tran_int(int n);   //将1~1999999999的整数翻译成英文句子 
13     ~robot(){               //析构函数 
14     };          
15 };
16 
17 //定义两个全局字符指针数组,存取所需的单词num1[]为1~19 
18 static const char *num1[] = {"","one","two","three","four","five","six","seven","eight","nine","ten",
19                             "eleven","twelve","thirteen","fourteen","fiveteen","sixteen","seventeen",
20                             "eighteen","nineteen"};
21 //num10中为20-90,空了0,1,所以可以直接用num10[n/10]调用,得到n对应的单词 
22 static const char *num10[] = {"","","twenty","thirty","forty",
23                              "fifty","sixty","seventy","eighty","ninety"};
24 //小于1000整数翻译
25 void robot::out(int a){    
26     int b = a%100;       //取后两位
27     //若百位不为0,输出百位数加hundred,若此时十位个位均为0,不加and
28     if (a/100 != 0)
29     {
30         cout << num1[a/100] << " hundred ";
31         if (b != 0)            //b 应该属于1~19,[20,100); 
32             cout << " and "; 
33     }
34     //当后两位在20以内,直接调用num1[n],输出
35     if (b < 20)
36         cout << num1[b];
37     else
38     {    //先调用num10[b],输出十位数 
39         cout << num10[b/10];
40         //个位不为0的应该输出:'-',个位数 
41         if (b % 10)
42             cout << "-" << num1[b%10]; 
43     } 
44 }
45 
46 void robot::tran_int(int n)
47 {
48     if (n > 1999999999)
49         cout << "dev-C++ 平台无法处理大于1999999999的数!" << endl;
50     else
51     {   //三位三位的取出,存在abcd中 1,987,654,321--如此三位三位取出 
52         int a = n/1000000000,             // 十亿位:1 
53             b = (n%1000000000)/1000000,    //十亿到百万:987 
54             c = (n%1000000)/1000,         //百万到前:654 
55             d = n%1000;                   //千位以下:321 
56     
57         //a不等于0时,输出,并加million,或thousand
58         if (a)     
59         {
60             out(a);                   //因为取出了三位,所以三位三位输出    
61             cout << " billion ";     //十亿以下 
62         }
63         if (b)
64         {
65             out(b);
66             cout << " million ";     //百万到十亿 
67         }    
68         if (c)
69         {
70             out(c);
71             cout << " thousand ";    //百万到千 
72         }
73         if (d)   //千位以下    
74         {         //距英文语法规则,(前面几位都存在的情况下)最后两位前一定有and,即千位以前要有and 
75             if ((d < 100 && a) || b || c)
76             {
77                 cout << " and ";    
78             }
79             out(d);          
80         }
81         cout << endl; 
82     }
83 }
84 
85 int main(void)
86 {
87     int n;
88     cout << "Input N : ";
89     cin >> n;
90     cout << n << endl;
91     robot brown;
92     brown.tran_int(n);
93     return 0;
94 }

原文链接: https://www.cnblogs.com/douzujun/p/5657156.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/236739

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月13日 下午5:09
下一篇 2023年2月13日 下午5:09

相关推荐