将阿拉伯数字转换成罗马数字 Integer to Roman

本文介绍了一种将阿拉伯数字转换为罗马数字的方法。利用数组存储罗马数字对应的字符,通过简单的数学运算实现转换。代码示例使用C++实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目源自于leetcode。

题目:将一个int型的阿拉伯数字转换为string型的罗马数字。

方法:首先要知道罗马数字的表示法。


个位、十位、百位、千位都是特点的字幕作为权值,每一个位的10个数字的表示方法也类似,都会在5有另一个中间的字母。

      

M=1000

  

= 500

 
           

I

1

 

XXXII

32

 

LXIII

63

 

XCIV

94

II

2

 

XXXIII

33

 

LXIV

64

 

XCV

95

III

3

 

XXXIV

34

 

LXV

65

 

XCVI

96

IV

4

 

XXXV

35

 

LXVI

66

 

XCVII

97

V

5

 

XXXVI

36

 

LXVII

67

 

XCVIII

98

VI

6

 

XXXVII

37

 

LXVIII

68

 

XCIX

99

VII

7

 

XXXVIII

38

 

LXIX

69

 

C

100

VIII

8

 

XXXIX

39

 

LXX

70

   

IX

9

 

XL

40

 

LXXI

71

 

EX.

 

X

10

 

XLI

41

 

LXXII

72

 

DI

501

XI

11

 

XLII

42

 

LXXIII

73

 

DL

550

XII

12

 

XLIII

43

 

LXXIV

74

 

DXXX

530

XIII

13

 

XLIV

44

 

LXXV

75

 

DCCVII

707

XIV

14

 

XLV

45

 

LXXVI

76

 

DCCCXC

890

XV

15

 

XLVI

46

 

LXXVII

77

 

MD

1500

XVI

16

 

XLVII

47

 

LXXVIII

78

 

MDCCC

1800

XVII

17

 

XLVIII

48

 

LXXIX

79

 

CM

900

XVIII

18

 

XLIX

49

 

LXXX

80

   

XIX

19

 

L

50

 

LXXXI

81

   

XX

20

 

LI

51

 

LXXXII

82

   

XXI

21

 

LII

52

 

LXXXIII

83

   

XXII

22

 

LIII

53

 

LXXXIV

84

   

XXIII

23

 

LIV

54

 

LXXXV

85

   

XXIV

24

 

LV

55

 

LXXXVI

86

   

XXV

25

 

LVI

56

 

LXXXVII

87

   

XXVI

26

 

LVII

57

 

LXXXVIII

88

   

XXVII

27

 

LVIII

58

 

LXXXIX

89

   

XXVIII

28

 

LIX

59

 

XC

90

   

XXIX

29

 

LX

60

 

XCI

91

   

XXX

30

 

LXI

61

 

XCII

92

   

XXXI

31

 

LXII

62

 

XCIII

93

   


既然各个位的表示方法固定,并且位与位之间并不影响,所以用数组将他们罗列出来。转换是从低位到高位。

        string cost[][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",""}};


代码:

class Solution {
public:
    string intToRoman(int num) {
        string cost[][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",""}};
        int n;
        int idx = 0;
        string roman = "", tmp = "";
        while(num!=0)
        {
            n = num%10;
            num /= 10;
            tmp = cost[idx][n];
            roman = tmp + roman;
            idx++;
        }
        return roman;
    }
};

注意:借助二维数组来对应不同位的不同权值字母。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值