现在的位置: 首页 > 综合 > 正文

罗马数字翻译成英文

2014年08月17日 ⁄ 综合 ⁄ 共 1807字 ⁄ 字号 评论关闭

今天在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);
}

抱歉!评论已关闭.