質問編集履歴

1

追記

2018/10/21 08:49

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -55,3 +55,207 @@
55
55
  このように一つ一つ数字に変換しようとしたのですが,XIとIXなどをどうカウントするかで困っています.
56
56
 
57
57
  なにかヒントだけでもいいので教えてくれると助かります.
58
+
59
+
60
+
61
+ #追記
62
+
63
+ 以下のようにアラビア数字→ローマ数字の関数を作ったのですが,うまく動きません...何がおかしいのか教えていただくと助かります(エラーは吐いていないですが,出力が文字化けしている).
64
+
65
+ ローマ数字からアラビア数字にするのも現状あまりうまく行っていません.
66
+
67
+ ```
68
+
69
+ #include <stdio.h>
70
+
71
+ #include <stdlib.h>
72
+
73
+ #include <string.h>
74
+
75
+
76
+
77
+ char num2roman(int);
78
+
79
+ int main(){
80
+
81
+ // Examples
82
+
83
+ printf("XIV = %c\n", num2roman(14)); // "XIV"
84
+
85
+ printf("CDXCV = %c\n", num2roman(495)); // "XIV"
86
+
87
+ printf("MCMXLV = %c\n", num2roman(1945)); // "XIV"
88
+
89
+ printf("MMMCMXCIX = %c\n", num2roman(3999)); // "XIV"
90
+
91
+ return 0;
92
+
93
+ }
94
+
95
+
96
+
97
+ char num2roman(int n){
98
+
99
+ int one, ten, hundred,thousand;
100
+
101
+ one = n % 10;
102
+
103
+ ten = n / 10;
104
+
105
+ hundred = n / 100;
106
+
107
+ thousand = n / 1000;
108
+
109
+
110
+
111
+ char th_S[20], h_S[20], t_S[20], o_S[20], Roman_number[100];
112
+
113
+ int i;
114
+
115
+
116
+
117
+ // 1,000の位
118
+
119
+ if(thousand >= 1){
120
+
121
+ for(i = 0; i < thousand; i++){
122
+
123
+ th_S[i] = 'M';
124
+
125
+ }
126
+
127
+ }
128
+
129
+
130
+
131
+ // 100の位
132
+
133
+ if(hundred < 4){
134
+
135
+ for(i = 0; i < hundred; i++){
136
+
137
+ h_S[i] = 'C';
138
+
139
+ }
140
+
141
+ }
142
+
143
+ else if (hundred == 4){
144
+
145
+ h_S[0] = 'C';
146
+
147
+ h_S[1] = 'D';
148
+
149
+ }
150
+
151
+ else if(hundred >=5 && hundred < 9){
152
+
153
+ h_S[0] = 'D';
154
+
155
+ for(i = 1; i < hundred - 5; i++){
156
+
157
+ h_S[i] = 'C';
158
+
159
+ }
160
+
161
+ }
162
+
163
+ else if(hundred == 9){
164
+
165
+ h_S[0] = 'C';
166
+
167
+ h_S[1] = 'M';
168
+
169
+ }
170
+
171
+
172
+
173
+ // 10の位
174
+
175
+ if(ten < 4){
176
+
177
+ for(i = 0; i < ten; i++){
178
+
179
+ t_S[i] = 'X';
180
+
181
+ }
182
+
183
+ }
184
+
185
+ else if (ten == 4){
186
+
187
+ t_S[0] = 'X';
188
+
189
+ t_S[1] = 'L';
190
+
191
+ }
192
+
193
+ else if(ten >=5 && ten < 9){
194
+
195
+ t_S[0] = 'L';
196
+
197
+ for(i = 1; i < ten - 5; i++){
198
+
199
+ t_S[i] = 'X';
200
+
201
+ }
202
+
203
+ }
204
+
205
+ else if(ten == 9){
206
+
207
+ t_S[0] = 'X';
208
+
209
+ t_S[1] = 'C';
210
+
211
+ }
212
+
213
+
214
+
215
+ // 1の位
216
+
217
+ if(one < 4){
218
+
219
+ for(i = 0; i < one; i++){
220
+
221
+ o_S[i] = 'I';
222
+
223
+ }
224
+
225
+ }
226
+
227
+ else if (one == 4){
228
+
229
+ o_S[0] = 'I';
230
+
231
+ o_S[1] = 'V';
232
+
233
+ }
234
+
235
+ else if(one >=5 && one < 9){
236
+
237
+ o_S[0] = 'V';
238
+
239
+ for(i = 1; i < one - 5; i++){
240
+
241
+ o_S[i] = 'I';
242
+
243
+ }
244
+
245
+ }
246
+
247
+ else if(one == 9){
248
+
249
+ o_S[0] = 'I';
250
+
251
+ o_S[1] = 'X';
252
+
253
+ }
254
+
255
+ sprintf(Roman_number,"%s%s%s%s", th_S, h_S, t_S, o_S);
256
+
257
+ return *Roman_number;
258
+
259
+ }
260
+
261
+ ```