今天在做一道课后练习题的时候遇到这么一道棘手的题?先到网上搜罗了一下关于罗马数字的相关知识,熟悉了一下罗马数字的写法。然后还是没有想出来。借鉴了一位网友的思想,他是使用Java编写的,代码非常简洁。他的思想是从罗马数字中找到规律1-3是I, 4是IV, 5是V....其实1-100中只存在几个特殊的区间,然后分别追加。我看了个半懂,开始用C编写。
思路:找到1-100间的特殊区间,使用if语句判断输入的数字是否在这个区间,如果在就减去这个区间最小值给这个数字(比如区间1-3,如果输入3,则3-1=2,把2给需下一次判断的值)然后循环再判断,直到这个值为0。
下边是我写的代码,欢迎各位朋友指点。
1
#include
<
stdio.h
>
2
3
int
main()
4
{
5
int
digit
=
1
;
6
int
roman;
7
8
while
( digit
<=
100
)
9
{
10
printf(
"
%d\t
"
, digit );
11
roman
=
digit;
12
13
while
( roman
>
0
)
14
{
15
if
( roman
==
100
)
16
{
17
printf(
"
C
"
);
18
roman
-=
100
;
19
}
20
else
if
( roman
<
100
&&
roman
>=
90
)
21
{
22
printf(
"
XC
"
);
23
roman
-=
90
;
24
}
25
else
if
( roman
<
90
&&
roman
>=
50
)
26
{
27
printf(
"
L
"
);
28
roman
-=
50
;
29
}
30
else
if
( roman
<
50
&&
roman
>=
49
)
31
{
32
printf(
"
IL
"
);
33
roman
-=
49
;
34
}
35
else
if
( roman
<
49
&&
roman
>=
40
)
36
{
37
printf(
"
XL
"
);
38
roman
-=
40
;
39
}
40
else
if
( roman
<
40
&&
roman
>=
10
)
41
{
42
printf(
"
X
"
);
43
roman
-=
10
;
44
}
45
else
if
( roman
<
10
&&
roman
>=
9
)
46
{
47
printf(
"
IX
"
);
48
roman
-=
9
;
49
}
50
else
if
( roman
<
9
&&
roman
>=
5
)
51
{
52
printf(
"
V
"
);
53
roman
-=
5
;
54
}
55
else
if
( roman
<
5
&&
roman
>=
4
)
56
{
57
printf(
"
IV
"
);
58
roman
-=
4
;
59
}
60
else
if
( roman
<
4
&&
roman
>=
1
)
61
{
62
printf(
"
I
"
);
63
roman
-=
1
;
64
}
65
else
66
printf(
"
must between 1~100 !
"
);
67
}
68
69
printf(
"
\n
"
);
70
digit
++
;
71
}
72
return
0
;
73
}

2

3

4



5

6

7

8

9



10

11

12

13

14



15

16



17

18

19

20

21



22

23

24

25

26



27

28

29

30

31



32

33

34

35

36



37

38

39

40

41



42

43

44

45

46



47

48

49

50

51



52

53

54

55

56



57

58

59

60

61



62

63

64

65

66

67

68

69

70

71

72

73
