public class Solution {
public string IntToRoman(int num) {
string Rstr = string.Empty;
int len = num.ToString().Length;
char[] Test = num.ToString().ToCharArray();
int I = 0;
//主要处理进度和4与6情况下
while (I< len)
{
int GWS = Convert.ToInt32(Test[I].ToString());
switch (len-I)
{
case 1:
Rstr = Rstr + RomChange("I", "V", "X", GWS);
break;
case 2:
Rstr = Rstr + RomChange("X", "L", "C", GWS);
break;
case 3:
Rstr = Rstr + RomChange("C", "D", "M", GWS);
break;
case 4:
Rstr = Rstr + RomChange("M", "Z", "Z", GWS);
break;
default:
Rstr = Rstr + RomChange("I", "V", "X", GWS);
break;
}
I++;
}
return Rstr;
}
private string RomChange(string start, string Half,string All,int Dia)
{
string returnStr = string.Empty;
int ZS = 0;
int YS = 0;
ZS = Dia/5;
YS = Dia%5;
if (YS == 4)
{
returnStr = ZS > 0 ? start + All : start + Half;
}
else
{
while (YS > 0)
{
returnStr = returnStr + start;
YS = YS - 1;
}
returnStr = (ZS > 0 ? Half : string.Empty) + returnStr;
}
return returnStr;
}
}
LetCode整数转罗马数字的解法!
本题主要是要处理的对数据进行位移处理。本题刚开始没注意性能,通过Math.Floor(num/(Math.Pow(10, len - 1)))获取最左那位数字,然后在用num减去GWS * (int)Math.Pow(10, len - 1)用于下次再计算这种方式性能太差了,后来看了他人的解决思路,改成直接读取字符性能立马提升