每周一道算法题(八)

本周的题目是一道经典题,难度级别"Medium"...

题目:将1~3999的阿拉伯数字转化为罗马数字。

这题还是比较经典的,做这题之前要先了解一下罗马数字,然后看看实现代码:

char* intToRoman(int num) {
    int numArr[] = {1000,900,500,400,100,90,50,40,10,9,5,4,1};
    char *numRoman[] = {"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
    char *numResult = malloc(100);
    
    for(int i=0; i<sizeof(numArr)/sizeof(int); i++){
        while(num >= numArr[i]){
            strcat(numResult,numRoman[i]);
            num -= numArr[i];
        }
    }
    return numResult;
}

百度百科的罗马数字里面就有这道经典的算法题,不过里面是用C++写的,在这里我也翻译成C,顺便用了个for循环,不易出错:

char* intToRoman(int num) 
    char* c[4][10]={
        {"","I","II","III","IV","V","VI","VII","VIII","IX"},
        {"","X","XX","XXX","XL","L","LX","LXX","LXXX","XC"},
        {"","C","CC","CCC","CD","D","DC","DCC","DCCC","CM"},
        {"","M","MM","MMM"}
    };
    char *roman = malloc(100);
    for (int i = 3; i >= 0; i--) {
        int temp = pow(10, i);
        strcat(roman, Roman[i][num / temp % 10]);
    }
}

版权声明:本文为 Crazy Steven 原创出品,欢迎转载,转载时请注明出处!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 今天的算法题难度级别'Easy',不得不说'easy'就是比'medium'简单啊,哈哈。。。 上周做的题目是in...
    CrazySteven阅读 645评论 0 2
  • 本周的算法题难度级别“Medium”,用了我三天工作之余的时间,总算过了,效率较低 题目:给你一串数字,在9宫格键...
    CrazySteven阅读 1,194评论 0 3
  • 本周题目难度级别'Medium',使用语言:C 题目:给你一个集合candidates和一个数字target,让你...
    CrazySteven阅读 646评论 0 0
  • 由于本周的题目比较简单,又很相似,于是就来上两道吧,两道题的难度级别都是"Easy" 题目:给一个有序的数组,将其...
    CrazySteven阅读 715评论 1 4
  • 本周的算法题就是重复造轮子,难度水平‘中’ 题目:将一个字符串转成int整型 需要注意的是: 忽略字符串起始的空格...
    CrazySteven阅读 866评论 2 2