今天在做一道课后练习题的时候遇到这么一道棘手的题?先到网上搜罗了一下关于罗马数字的相关知识,熟悉了一下罗马数字的写法。然后还是没有想出来。借鉴了一位网友的思想,他是使用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 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 }