罗马数字翻译成英文

来源:互联网 发布: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);}


原创粉丝点击