#前提知識
授業での課題なのですが,前提知識が関数,論理演算子,for文, if文,再帰関数くらいで,ほとんで手がつけられないです.
この授業では現在ポインタを扱っているのですが,ネットで調べると辞書型のものばかりヒットしてあまり参考になりません...
#試したこと(ローマ数字→アラビア数字)
文字列を
int roman2num(char *s){ int length = strlen(s); // counting digits int one, five, ten, fifty, hundred, f_hundred, thousand; for(int i = 0; i < length; i++){ if(s[i] == 'I') one++; if(s[i] == 'V') five++; if(s[i] == 'X') ten++; if(s[i] == 'L') fifty++; if(s[i] == 'C') hundred++; if(s[i] == 'D') f_hundred++; if(s[i] == 'M') thousand++; } int sum = 0; return sum; }
このように一つ一つ数字に変換しようとしたのですが,XIとIXなどをどうカウントするかで困っています.
なにかヒントだけでもいいので教えてくれると助かります.
#追記
以下のようにアラビア数字→ローマ数字の関数を作ったのですが,うまく動きません...何がおかしいのか教えていただくと助かります(エラーは吐いていないですが,出力が文字化けしている).
ローマ数字からアラビア数字にするのも現状あまりうまく行っていません.
#include <stdio.h> #include <stdlib.h> #include <string.h> char num2roman(int); int main(){ // Examples printf("XIV = %c\n", num2roman(14)); // "XIV" printf("CDXCV = %c\n", num2roman(495)); // "XIV" printf("MCMXLV = %c\n", num2roman(1945)); // "XIV" printf("MMMCMXCIX = %c\n", num2roman(3999)); // "XIV" return 0; } char num2roman(int n){ int one, ten, hundred,thousand; one = n % 10; ten = n / 10; hundred = n / 100; thousand = n / 1000; char th_S[20], h_S[20], t_S[20], o_S[20], Roman_number[100]; int i; // 1,000の位 if(thousand >= 1){ for(i = 0; i < thousand; i++){ th_S[i] = 'M'; } } // 100の位 if(hundred < 4){ for(i = 0; i < hundred; i++){ h_S[i] = 'C'; } } else if (hundred == 4){ h_S[0] = 'C'; h_S[1] = 'D'; } else if(hundred >=5 && hundred < 9){ h_S[0] = 'D'; for(i = 1; i < hundred - 5; i++){ h_S[i] = 'C'; } } else if(hundred == 9){ h_S[0] = 'C'; h_S[1] = 'M'; } // 10の位 if(ten < 4){ for(i = 0; i < ten; i++){ t_S[i] = 'X'; } } else if (ten == 4){ t_S[0] = 'X'; t_S[1] = 'L'; } else if(ten >=5 && ten < 9){ t_S[0] = 'L'; for(i = 1; i < ten - 5; i++){ t_S[i] = 'X'; } } else if(ten == 9){ t_S[0] = 'X'; t_S[1] = 'C'; } // 1の位 if(one < 4){ for(i = 0; i < one; i++){ o_S[i] = 'I'; } } else if (one == 4){ o_S[0] = 'I'; o_S[1] = 'V'; } else if(one >=5 && one < 9){ o_S[0] = 'V'; for(i = 1; i < one - 5; i++){ o_S[i] = 'I'; } } else if(one == 9){ o_S[0] = 'I'; o_S[1] = 'X'; } sprintf(Roman_number,"%s%s%s%s", th_S, h_S, t_S, o_S); return *Roman_number; }
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/10/21 11:56