请将给出的整数转化为罗马数字
保证输入数字的范围在1 到 3999之间。
//感觉这道题没什么意义
public String intToRoman(int num) {
int[] values = { 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 };
String[] strs = { "M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I" };
StringBuilder sb = new StringBuilder();
for (int i = 0; i < values.length; i++) {
while (num >= values[i]) {
num -= values[i];
sb.append(strs[i]);
}
}
return sb.toString();
}
public static String intToRoman(int num) {
String M[] = {"", "M", "MM", "MMM"};
String C[] = {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"};
String X[] = {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"};
String I[] = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};
return M[num/1000] + C[(num%1000)/100] + X[(num%100)/10] + I[num%10];
}
}
public class Solution {
public String intToRoman(int num) {
StringBuilder sb = new StringBuilder();
String[] signs = {"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
int[] values = {1000,900,500, 400,100, 90, 50, 40, 10, 9, 5, 4, 1};
for (int i = 0; num!=0; i++) {
while (num>=values[i]){
num -= values[i];
sb.append(signs[i]);
}
}
return sb.toString();
}
}
class Solution {
public:
string intToRoman(int num) {
string one[]={"I","II","III","IV","V","VI","VII","VIII","IX"};
string ten[]={"X","XX","XXX","XL","L","LX","LXX","LXXX","XC"};
string hundred[]={"C","CC","CCC","CD","D","DC","DCC","DCCC","CM"};
string thou[]={"M","MM","MMM"};
string roman="";
if(num>=1000){roman += thou[num/1000-1]; num = num%1000;}
if(num>=100){roman += hundred[num/100 -1]; num = num %100;}
if(num>=10){roman += ten[num/10 - 1];num = num%10;}
if(num>=1) roman += one[num%10 - 1];
return roman;
}
};
string intToRoman(int num) {
string res="";
vector<int> key={1000,900,500,400,100,90,50,40,10,9,5,4,1};
vector<string> value={"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
for(int i=0;i<key.size();++i){
int count=num/key[i];
for(int j=0;j<count;++j)
res+=value[i];
num=num%key[i];
}
return res;
}
class Solution {
public:
vector> dict={
{1,'I'},
{10,'X'},
{100,'C'},
{1000,'M'},
};
vector> dict2={
{5,'V'},
{50,'L'},
{500,'D'},
};
string intToRoman(int num) {
int tmp;
int n;
string ret="";
for(int i=3;i>=0;i--){
n=num/dict[i].first;
if(n>0){
if(1<=n&&n<=3)
ret=ret+string(n,dict[i].second);
if(n==4)
ret=ret+dict[i].second+dict2[i].second;
if(n==5)
ret=ret+dict2[i].second;
if(6<=n&&n<=8)
ret=ret+dict2[i].second+string(n-5,dict[i].second);
if(n==9)
ret=ret+dict[i].second+dict[i+1].second;
num=num%dict[i].first;
}
}
return ret;
}
};
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
再加上特殊的:900,400,90,40,9,4import java.util.*;
public class Solution {
/**
*
* @param num int整型
* @return string字符串
*/
public String intToRoman (int num) {
// write code here
int[] numbers={1000,900,500,400,100,90,50,40,10,9,5,4,1};
String[] str={"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
String out="";
for(int i=0 ; i<numbers.length;i++)
{
while(true)
{
if(num/numbers[i]>0)
{
out=out+str[i];
num=num-numbers[i];
}
else
break;
}
}
return out;
}
} 预先保存个、十、百、千位的各数值和对应的罗马表示符;
分离给定数字里的个位、十位、百位、千位;
然后将分离出的数字位与对应的罗马表示符进行匹配;
拼接个、十、百、千位的匹配字符串,形成最终的结果;
public class Solution {
public String intToRoman(int num) {
Map<Integer, String> onesMap = new HashMap<>(10);
Map<Integer, String> tensMap = new HashMap<>(10);
Map<Integer, String> hundredsMap = new HashMap<>(10);
Map<Integer, String> thousandsMap = new HashMap<>(3);
// 准备数据
// 个位
onesMap.put(0, "");
onesMap.put(1, "I");
onesMap.put(2, "II");
onesMap.put(3, "III");
onesMap.put(4, "IV");
onesMap.put(5, "V");
onesMap.put(6, "VI");
onesMap.put(7, "VII");
onesMap.put(8, "VIII");
onesMap.put(9, "IX");
// 十位
tensMap.put(0, "");
tensMap.put(1, "X");
tensMap.put(2, "XX");
tensMap.put(3, "XXX");
tensMap.put(4, "XL");
tensMap.put(5, "L");
tensMap.put(6, "LX");
tensMap.put(7, "LXX");
tensMap.put(8, "LXXX");
tensMap.put(9, "XC");
// 百位
hundredsMap.put(0, "");
hundredsMap.put(1, "C");
hundredsMap.put(2, "CC");
hundredsMap.put(3, "CCC");
hundredsMap.put(4, "CD");
hundredsMap.put(5, "D");
hundredsMap.put(6, "DC");
hundredsMap.put(7, "DCC");
hundredsMap.put(8, "DCCC");
hundredsMap.put(9, "CM");
// 千位
thousandsMap.put(0, "");
thousandsMap.put(1, "M");
thousandsMap.put(2, "MM");
thousandsMap.put(3, "MMM");
if (num < 10) {
String result = onesMap.get(num);
return result;
}
if (num < 100) {
// 获取十位
int tensPlace = num / 10;
String tensStr = tensMap.get(tensPlace);
// 获取个位
int onesPlace = num - (tensPlace * 10);
String onesStr = onesMap.get(onesPlace);
// 拼接
return tensStr + onesStr;
}
if (num < 1000) {
// 获取百位
int hundredsPlace = num / 100;
String hundredsStr = hundredsMap.get(hundredsPlace);
// 获取十位
int tensPlace = (num - (hundredsPlace * 100)) / 10;
String tensStr = tensMap.get(tensPlace);
// 获取个位
int onesPlace = num - (hundredsPlace * 100) - (tensPlace * 10);
String onesStr = onesMap.get(onesPlace);
return hundredsStr + tensStr + onesStr;
}
if (num < 4000) {
// 获取千位
int thousandsPlace = num / 1000;
String thousandsStr = thousandsMap.get(thousandsPlace);
// 获取百位
int hundredsPlace = (num - (thousandsPlace * 1000)) / 100;
String hundredsStr = hundredsMap.get(hundredsPlace);
// 获取十位
int tensPlace = (num - (thousandsPlace * 1000) - (hundredsPlace * 100)) / 10;
String tensStr = tensMap.get(tensPlace);
// 获取个位
int onesPlace = num - (thousandsPlace * 1000) - (hundredsPlace * 100) - (tensPlace * 10);
String onesStr = onesMap.get(onesPlace);
return thousandsStr + hundredsStr + tensStr + onesStr;
}
else {
return "not supported num!";
}
}
}
其实就是操作数组,然后拼接字符串的问题。
public class Solution {
public String intToRoman(int num) {
String ones[]={"I","II","III","IV","V","VI","VII","VIII","IX"};
String tens[]={"X","XX","XXX","XL","L","LX","LXX","LXXX","XC"};
String bais[]={"C","CC","CCC","CD","D","DC","DCC","DCCC","CM"};
String qians[]={"M","MM","MMM"};
String ge = num%10==0?"":ones[num%10 - 1];
String shi = num/10%10==0?"":tens[num/10%10 - 1];
String bai = num/100%10==0?"":bais[num/100%10 - 1];
String qian = num/1000==0?"":qians[num/1000 - 1];
return qian + bai + shi + ge;
}
}
class Solution {
public:
string intToRoman(int num) {
string res = "";
vector<int> key = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
vector<string> value={"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
for(int i = 0;i < key.size(); i++){
int count = num / key[i];
for(int j = 0;j < count; j++){
res += value[i];
}
num %= key[i];
}
return res;
}
};
class Solution {
public:
char dict[3][3]={{'I','V','X'},{'X','L','C'},{'C','D','M'}};
int nums[4]={1,10,100,1000};
string intToRoman(int num) {
string s="";
for(int i=3;i>0&&num>0;i--)
{
int tp=num/nums[i];
int tpp=num%nums[i];
for(int p=0;p<tp;p++)
s+=dict[i-1][2];
num-=tp*nums[i];
int k=tpp/nums[i-1];
if(k>8)
{
for(int p=0;p<10-k;p++)
s+=dict[i-1][0];
s+=dict[i-1][2];
}
else if(k>=5&&k<=8)
{
s+=dict[i-1][1];
for(int p=0;p<k-5;p++)
s+=dict[i-1][0];
}
else if(k>3)
{
for(int p=0;p<k-3;p++)
s+=dict[i-1][0];
s+=dict[i-1][1];
}
else
{
for(int p=0;p<k;p++)
s+=dict[i-1][0];
}
num-=nums[i-1]*k;
}
return s;
}
};
//6. integer-to-roman
string intToRoman(int num) {
//I(1), X(10), C(100), M(1000), V(5), L(50), D(500)
map<int, string> myMap{ {0, ""}, {1, "I"}, {2, "II"}, {3, "III"}, {4, "IV"}, {5, "V"}, {6, "VI"}, {7,"VII"}, {8, "VIII"}, {9, "IX"},
{10, "X"}, {20, "XX"}, {30, "XXX"}, {40, "XL"}, {50, "L"}, {60, "LX"}, {70,"LXX"}, {80, "LXXX"}, {90, "XC"},
{100, "C"}, {200, "CC"}, {300, "CCC"}, {400, "CD"}, {500, "D"}, {600, "DC"}, {700,"DCC"}, {800, "DCCC"}, {900, "CM"},
{1000, "M"}, {2000, "MM"}, {3000, "MMM"} };
string re = "";
int bit = 1000;
while(num) {
if(num / bit) {
int temp = num / bit * bit;
re += myMap[temp];
num -= temp;
}
else {
bit /= 10;
}
}
return re;
} public class Solution {
public String intToRoman(int num) {
int[] values = { 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 };
String[] strs = { "M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I" };
StringBuilder sb = new StringBuilder();
for (int i = 0; i < values.length; i++) {
while (num >= values[i]) {
num -= values[i];
sb.append(strs[i]);
}
}
return sb.toString();
}
}
class Solution {
public:
map<int, char> roman_digit_map = {
{ 1, 'I' },{ 5, 'V' },{ 10, 'X' },
{ 50, 'L' },{ 100, 'C' },{ 500, 'D' },
{ 1000, 'M' },
};
string intToRoman(int num) {
string res;
if (num == 0)
return NULL;
stack<int> s;
int digit = 0;
while (num != 0) {
digit = num % 10;
s.push(digit);
num = num / 10;
}
int digit_num = s.size();
while (!s.empty()) {
if (s.top() == 0) {
s.pop();
digit_num--;
continue;
}
else {
res.append(numberToRoman(s.top(), pow(10, digit_num - 1)));
s.pop();
digit_num--;
}
}
return res;
}
private:
string numberToRoman(int digit, int multiplier) {
string res;
switch (digit) {
case 1:
res.push_back(roman_digit_map.at(1 * multiplier));
break;
case 2:
res.push_back(roman_digit_map.at(1 * multiplier));
res.push_back(roman_digit_map.at(1 * multiplier));
break;
case 3:
res.push_back(roman_digit_map.at(1 * multiplier));
res.push_back(roman_digit_map.at(1 * multiplier));
res.push_back(roman_digit_map.at(1 * multiplier));
break;
case 4:
res.push_back(roman_digit_map.at(1 * multiplier));
res.push_back(roman_digit_map.at(5 * multiplier));
break;
case 5:
res.push_back(roman_digit_map.at(5 * multiplier));
break;
case 6:
res.push_back(roman_digit_map.at(5 * multiplier));
res.push_back(roman_digit_map.at(1 * multiplier));
break;
case 7:
res.push_back(roman_digit_map.at(5 * multiplier));
res.push_back(roman_digit_map.at(1 * multiplier));
res.push_back(roman_digit_map.at(1 * multiplier));
break;
case 8:
res.push_back(roman_digit_map.at(5 * multiplier));
res.push_back(roman_digit_map.at(1 * multiplier));
res.push_back(roman_digit_map.at(1 * multiplier));
res.push_back(roman_digit_map.at(1 * multiplier));
break;
case 9:
res.push_back(roman_digit_map.at(1 * multiplier));
res.push_back(roman_digit_map.at(10 * multiplier));
break;
}
return res;
}
};
public class Solution {
public String intToRoman(int num) {
int[] values = { 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 };
String[] strs = { "M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I" };
StringBuilder sb = new StringBuilder();
for (int i = 0; i < values.length; i++) {
while (num >= values[i]) {
num -= values[i];
sb.append(strs[i]);
}
}
return sb.toString();
}
}
public String intToRoman(int num) {
Map<Integer, String> map = new HashMap<>();
int[] keys = { 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 };
String[] values = {"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
for (int i = 0; i < keys.length; i++) {
map.put(keys[i], values[i]);
}
String res = "";
for (int i = 0; i < keys.length; i++) {
int count = num/keys[i];
for(int j=0;j<count;j++){
res += map.get(keys[i]);
}
num %= keys[i];
}
return res;
}