罗马数字翻译成英文
来源:互联网 发布:linux ansi 控制码 编辑:程序博客网 时间:2024/05/16 18:43
今天在CSDN上看到一篇文章,面试题: 数字转英文 数字发音,即将罗马数字表示的数字翻译成英文表达,我试了试有道,貌似有道和博主的显示方式有点出入,刚好下午有点时间所以就做做这一题,博主那个程序是将输入参数用数字表示的,我的做法是使用字符来做:
对于数字字符串,先得到数字的长度,然后从右到左每3个数字为一组进行显示,比如,对于数字1231234,就可以分成3组,分别是1,231,234,这样从左到右一次分别显示每一组,对于1231234的三组数字,第一组为1,所以输出one million,对于第二祖231,输出ttwo hundred and thirty-one thousand,对于第三组输出two hundred and thirty-four,使用有道的朋友可能知道有道就是这么显示的。
下面就来编码实现:
1.首先是求数字字符串的长度,这个简单;
2.然后就是将每3个数字分组,最左边一组可以没有三个数字,
3.输出每一组
在编码的过程中要使用到几个数组,分别存储英文中的数字表示,这里利用上面那篇博文中的数组,稍作修改,源代码如下
#include<stdio.h>#include<string.h>void outputGroup(char const *num, int start, int len); char *dig[9] = {"One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine"}; char *tee[10] = {"Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen"}; char *ten[8] = {"Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety"}; char *big[] = {"","", "Thousand", "Million", "Billion", "Trillion", "Quadrillion", "Sextillion", "Septillion", "Octillion", "Nonillion"}; int length = sizeof(big) / sizeof(char *);//求出big数组中元素的个数,为了方便处理,前两个为空串/** *将罗马数字表示的数字转换为英文字母标识,参数为罗马数字标识 */void process(char const *roman) { int len = strlen(roman); int size = len / 3; int headSize = len % 3; int i = 0; int pos = 0; //略去对数字进行检查的代码 if(headSize == 0) { headSize = 3; } else { size++; } //每3个数字一组处理,第一组可能不够三个 for(i = size; i > 0; i--) { if(i == size) { outputGroup(roman, pos, headSize); pos += headSize; } else { outputGroup(roman, pos, 3); pos += 3; } printf(" %s ", big[i]); }}/*输出一组数字*/void outputGroup(char const *num, int start, int len) { int i = 0, j; while(len > 0) { if(len == 3) { printf("%s hundred and ",dig[num[start++] - '1']); } else if(len == 2){ i = num[start++] - '1'; if(i == 0) { printf("%s ", tee[num[start] - '0']); break; } else if(i > 0){ printf("%s", ten[i-1]); j = num[start] - '0'; if(j == 0) { break; } else { printf("-"); } } } else { printf("%s ", dig[num[start] - '1']); } len--; }}int main() { //process("36756123"); char num[100]; scanf("%s", num);// outputGroup(num, 0, 3); process(num);}
- 罗马数字翻译成英文
- 中文翻译成英文 ant
- 中文诗词翻译成英文
- 西餐菜单怎么翻译成英文
- 数字翻译成英文的小游戏
- 中文地址翻译成英文实例
- 甜蜜蜜的歌词翻译成英文
- 如何把中文地址翻译成英文?[婷停亭]
- 利用Google脚本将你的Blog翻译成英文
- 三字经被翻译成英文后,就内涵了
- 为地球朝着什么方翻译成英文"朝
- 华为上机练习题--将英文号码翻译成数字号码
- 怎么将英文网页整篇翻译成中文
- 拼音翻译成阿拉伯数字
- 拼音翻译成阿拉伯数字
- Blog技巧,让Google把你的blog翻译成英文
- Blog技巧,让Google把你的blog翻译成英文
- Blog技巧,让Google把你的blog翻译成英文
- uploadify 文件上传 struts2
- Chapter 7Iterators and the Generic for
- 提高程序员面试代码质量的三要素
- 自己学习LINQ记录(二)
- 弹出中间层
- 罗马数字翻译成英文
- 《MySQL 5.6从零开始学(视频教学版)(配光盘)》
- varnish 加速
- Shell去除空行
- java编程中'为了性能'一些尽量做到的地方
- cocos2dx 定时更新用法
- Junit单元测试
- JS检测对象中是否有某个属性或方法
- POJ 3006 Dirichlet's Theorem on Arithmetic Progressions