重複の可能性:
整数値をローマ数字の文字列に変換する方法は?
ここで初めて質問します。私は少し取り組んできた地平線上にプロジェクトがあり、ここや他の場所で尋ねられたようなものを見つけることができないようです。目標は、上限のない整数を受け入れ、それをローマ数字に変換することです。整数には実際には上限があるため、サブ文字列に配置された3文字の各セットを示すためにアポストロフィを使用して、整数を解析する前に文字列に変換する必要があります。a)位置に基づいて表示されるものにローマ数字を割り当てるb)アポストロフィを表示して3つの各セットをカウントするループの概念化に問題があります。
これまでのところ:
for(int i=0;i<(int)input.length()/3;i++){
temp=input.substr(i,3);
for(int j = 0; j < (int)temp.length(); j++){
if(j == 0){
if(temp[j] == '9') cout<<"CM";
else if(temp[j] >= '8') cout<<"DCCC";
else if(temp[j] >= '7') cout<<"DCC";
else if(temp[j] >= '6') cout<<"DC";
else if(temp[j] >= '5') cout<<"D";
else if(temp[j] == '4') cout<<"CD";
else if(temp[j] == '3') cout<<"CCC";
else if(temp[j] == '2') cout<<"CC";
else if(temp[j] == '1') cout<<"C";
}
else if(j == 1){
if(temp[j] == '9') cout<<"XC";
else if(temp[j] >= '8') cout<<"LXXX";
else if(temp[j] >= '7') cout<<"LXX";
else if(temp[j] >= '6') cout<<"LX";
else if(temp[j] >= '5') cout<<"L";
else if(temp[j] == '4') cout<<"XL";
else if(temp[j] == '3') cout<<"XXX";
else if(temp[j] == '2') cout<<"XX";
else if(temp[j] == '1') cout<<"X";
}
else if(j ==2){
if(temp[j] == '9') cout<<"IX";
else if(temp[j] == '8') cout<<"VIII";
else if(temp[j] == '7') cout<<"VII";
else if(temp[j] == '6') cout<<"VI";
else if(temp[j] >= '5') cout<<"V";
else if(temp[j] == '4') cout<<"IV";
else if(temp[j] == '3') cout<<"III";
else if(temp[j] == '2') cout<<"II";
else if(temp[j] == '1') cout<<"I";
}
}
}
数字はそれ自体で十分に表示されますが、ループを右から開始し、入力内の数字の実際の位置を維持しながら、3で左に移動するように指示する方法を理解するのに苦労しています(たとえば、1234 1をCではなくIとして表示します。また、アポストロフィを書き込むためのループを理解する必要があります。