数字的翻译

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);
}

乐播投屏是一款简单好用、功能强大的专业投屏软件,支持手机投屏电视、手机投电脑、电脑投电视等多种投屏方式。 多端兼容与跨网投屏:支持手机、平板、电脑等多种设备之间的自由组合投屏,且无需连接 WiFi,通过跨屏技术打破网络限制,扫一扫即可投屏。 广泛的应用支持:支持 10000+APP 投屏,包括综合视频、网盘与浏览器、美韩剧、斗鱼、虎牙等直播平台,还能将央视、湖南卫视等各大卫视的直播内容一键投屏。 高清流畅投屏体验:腾讯独家智能音画调校技术,支持 4K 高清画质、240Hz 超高帧率,低延迟不卡顿,能为用户提供更高清、流畅的视觉享受。 会议办公功能强大:拥有全球唯一的 “超级投屏空间”,扫码即投,无需安装。支持多人共享投屏、远程协作批注,PPT、Excel、视频等文件都能流畅展示,还具备企业级安全加密,保障会议资料不泄露。 多人互动功能:支持多人投屏,邀请好友加入投屏互动,远程也可加入。同时具备一屏多显、语音互动功能,支持多人连麦,实时语音交流。 文件支持全面:支持 PPT、PDF、Word、Excel 等办公文件,以及视频、图片等多种类型文件的投屏,还支持网盘直投,无需下载和转格式。 特色功能丰富:投屏时可同步录制投屏画面,部分版本还支持通过触控屏或电视端外接鼠标反控电脑,以及在投屏过程中用画笔实时标注等功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值