数字的翻译

1.以下程序是对一个总长不超过十位的小数进行翻译,其翻译结果为英文。

2.其中函数translate(char a[], int begin, int end),是对所输入数的整数部分进行翻译。函数void translate1(char a[], int begin, int end),是对所输入的小数部分进行翻译,void translate2(),是对程序进行保护,防止数据被更改。

3.函数总体来说不难,要点也就是关键字的加入部分,要涉及判断,比如说hundred, thousand, million, billion, point.这些关键字的加入部分需要细心,要考虑全面。另外就是英文里面的five, three,nine, twelve, eleven等数字在变形时形式会发生变化,在程序中要单个的罗列,进行讨论。函数中用到了递归,其实每一次的翻译只翻译一个数字,当要翻译的数字在特殊位置时,进行讨论也就是关键字的引入。最后要注意的是要翻译数字要是后面的部分都为零,比如1001和1000的翻译就不同,本人刚开始写就出现了翻译1000为one thousand hundred,其它的都很简单,只是不停地重复,就不再多说,代码如下:



#include<iostream>
#include<string.h>
 
using namespace std;
 
#define Max 10
 
void translate(char a[], int begin, int end);
void translate1(char a[], int begin, int end);
void translate2();
 
int main() {
translate2();
return 0;
}
 
 
void translate2() {
char a[Max];
cout << "Please input the number you want to translate.\n" << "Num:                 ";
cin >> a;
int end = strlen(a);
int i , begin = end;
for (i=0; i<end; i++) {
if (a[i] == '.')
begin = i;
}
cout << "The translate number is: ";
translate(a, 0, begin);
if (begin != end) {
cout << "point ";
translate1(a, begin+1, end);
cout << " ";
}
cout << endl;
}
 
void translate(char a[], int begin, int end) {
int size = end-begin;
if (size == 1) {
switch(a[begin]) {
case '0': return;
case '1': cout << "one "; return;
case '2': cout << "two "; return;
case '3': cout << "three "; return;
case '4': cout << "four"; return;
case '5': cout << "five "; return;
case '6': cout << "six"; return;
case '7': cout << "seven"; return;
case '8': cout << "eight"; return;
case '9': cout << "nine"; return;
default: cout << "error"; return;
}
}
if (size == 2) {
int i = (int)a[begin]-48, j = (int)a[begin+1]-48;
if (i == 0 && j == 0) return;
if (i == 1) {
if (j == 1) {cout << "eleven "; return;}
if (j == 2) {cout << "twelve "; return;}
if (j == 5) {cout << "fifteen "; return;}
if (j == 8) {cout << "eighteen "; return;}
translate(a, begin+1, begin+2); cout << "teen "; return;
} else {
if (i == 2) { cout << "twenty "; translate(a, begin+1, begin+2); return;}
if (i == 3) { cout << "thirty "; translate(a, begin+1, begin+2); return;}
if (i == 5) { cout << "fifty "; translate(a, begin+1, begin+2); return;}
if (i == 8) { cout << "eighty "; translate(a, begin+1, begin+2); return;}
translate(a, begin, begin+1);
cout << "ty ";
translate(a, begin+1, begin+2);
}
}
if (size == 3) {
translate(a, begin, begin+1);
if (a[begin] != '0') cout << " hundred ";
if (a[begin+1] == '0' && a[begin+2] == '0')
return;
else {
cout << "and ";
translate(a, begin+1, end);
}
}
if (size == 4) {
translate(a, begin, begin+1);
if (a[begin] != '0') cout << " thousand ";
translate(a, begin+1, end);
}
if (size == 5) {
translate(a, begin, begin+2);
if (a[begin] != '0') cout << " thousand ";
translate(a, begin+2, end);
}
if (size == 6) {
translate(a, begin, begin+3);
if (a[begin] != '0') cout << " thousand ";
translate(a, begin+3, end);
}
if (size == 7) {
translate(a, begin, begin+1);
if (a[begin] != '0') cout << " million ";
translate(a, begin+1, end);
}
if (size == 8) {
translate(a, begin, begin+2);
if (a[begin] != '0') cout << " million ";
translate(a, begin+2, end);
}
if (size == 9) {
translate(a, begin, begin+3);
if (a[begin] != '0') cout << " million ";
translate(a, begin+3, end);
}
if (size == 10) {
translate(a, begin, begin+1);
if (a[begin] != '0') cout << " billion ";
translate(a, begin+1, end);
}
}
 
 
void translate1(char a[], int begin, int end) {
for (int i=begin; i<end; i++) 
translate(a, i, i+1);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值