每日一道算法题(7)

整数转换成罗马数字

原题目链接:计蒜客-整数转换成罗马数字

给定一个整数 numnum,将整数转换成罗马数字。

如 1,2,3,4,51,2,3,4,5 对应的罗马数字分别为I,II,III,IV,V等,更详细的说明见此 链接

输入格式

第一行输入一个整数 num(1 \leq num \leq 3999)num(1≤num≤3999)。

输出格式

输出 numnum 对应的罗马数字。

样例输入

123

样例输出

CXXIII


分析
1.关于罗马数字:
- 相同的数字连写、所表示的数等于这些数字相加得到的数、如:Ⅲ=3;
- 小的数字在大的数字的右边、所表示的数等于这些数字相加得到的数、 如:Ⅷ=8、Ⅻ=12;
- 小的数字(限于 I、X 和 C)在大的数字的左边、所表示的数等于大数减小数得到的数、如:Ⅳ=4、Ⅸ=9;
- 正常使用时、连写的数字重复不得超过三次;
- 在一个数的上面画一条横线、表示这个数扩大 1000 倍。
2.解法:
用十进制数的每一位对应各自的罗马数字。

C++

#include <iostream>
#include <stdio.h>
using namespace std; 

int main(int argc, char *argv[]) {
    int roman;
    string bit[10] = { "", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX" }; // ,1,2,3,4,5,6,7,8,9 
    string ten[10] = { "", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC" }; // ,10,20,30,40,50,60,70,80,90 
    string hundred[10] = { "", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM" };// ,100,200,300,400,500,600,700,800,900     
    string thousand[4] = { "", "M", "MM", "MMM" }; //,1000,2000,3000
    cin>>roman;


    string qian = thousand[roman/1000];
    string bai = hundred[roman%1000/100];
    string shi=ten[roman%100/10];
    string ge=bit[roman%10];

    cout<<qian<<bai<<shi<<ge<<endl;
}

C语言

#include<stdio.h>
int main(int argc, char **argv) {
    int num;
    //num   1<=num<=3999
    char* bit[10] = { "", "I", "II", "III", "IV", "V", "VI", "VII", "VIII",
            "IX" }; // ,1,2,3,4,5,6,7,8,9
    char* ten[10]   = { "", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX",
            "XC" }; // ,10,20,30,40,50,60,70,80,90
    char* hundred[10] = { "", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC",
            "CM" }; // ,100,200,300,400,500,600,700,800,900
    char* thousand[4] = { "", "M", "MM", "MMM" }; // ,1000,2000,3000
    scanf("%d", &num);
    printf("%s", thousand[num / 1000]);
    printf("%s", hundred[num % 1000 / 100]);
    printf("%s", ten[num % 100 / 10]);
    printf("%s", bit[num % 10]);
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值