可能重复:
如何将整数值转换为罗马数字字符串?
第一次在这里问问题。我有一个项目即将完成,我一直在做一些工作,但似乎在这里或其他地方找不到类似的问题。目标是接受没有上限的整数,并将其转换为罗马数字。由于整数实际上确实有一个上限,因此我必须在解析它之前将其转换为字符串,使用撇号来表示放置在子字符串中的每组三个字符。我在概念化循环时遇到了麻烦,a)根据他们的位置将罗马数字分配给他们所看到的 b)通过显示撇号来计算每组三个。
到目前为止,我有:
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";
}
}
}
数字本身显示得很好,但我无法弄清楚如何告诉循环从右边开始,并以三分之二的方式工作,保持输入中数字的实际位置(例如 1234 应该将 1 显示为 I,而不是 C。我还需要弄清楚要在撇号中写入的循环。