由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 跪求roman number to integer 和 integer to roman number的程序
相关主题
罗马数字转换成十进制为什么我这段简单的程序segment fault
问个google 题c++ 程序一问
两个Amazon面试题map numbers to strings
问个关于排序的面试题Microsoft interview question
bloomberg onsite & offerlarge file的一道题
问一个面试问题一道题:Vertical Sticks
你们看过programming pearls (2nd edition English) or 正在看的同学们一道C语言题
C的argc问题懒得写了,想练手的就写写贴在这里吧
相关话题的讨论汇总
话题: int话题: digit话题: char话题: getroman话题: return
进入JobHunting版参与讨论
1 (共1页)
w****x
发帖数: 2483
1
跪求roman number to integer 和 integer to roman number的程序, 特别是第一个
,哪个大牛帖一个??
S**I
发帖数: 15689
2
N久以前写的一个:
#include
int getDecimal(char);
int romanToDecimal(char *);
char getRoman(int);
char * digitToRoman(int, int, char *);
char * decimalToRoman(int, char *);
int main(int argc, char* argv[]){
printf("Roman: %s\n", argv[1]);
int d = romanToDecimal(argv[1]);
printf("Decimal: %d\n", d);
char r[1000];
decimalToRoman(d, r);
printf("Roman: %s\n", r);
}
int getDecimal(char a){
switch(a){

case 'I':
return 1;
case 'V':
return 5;
case 'X':
return 10;
case 'L':
return 50;
case 'C':
return 100;
case 'D':
return 500;
case 'M':
return 1000;
}
return 0;
}
int romanToDecimal(char * r){
int d1 = getDecimal(*r), d2 = getDecimal(*++r), d = 0;
while(1){
if(d1 >= d2){
d += d1;
}
else{
d -= d1;
}
if(d2 == 0){
break;
}
d1 = d2;
d2 = getDecimal(*++r);
}
return d;
}
char getRoman(int d){
switch(d){

case 1:
return 'I';
case 5:
return 'V';
case 10:
return 'X';
case 50:
return 'L';
case 100:
return 'C';
case 500:
return 'D';
case 1000:
return 'M';
}
return '\0';
}
char * digitToRoman(int digit, int base, char * r){
if(digit <= 3){
while(digit > 0){*r++ = getRoman(base); digit--;}
}
else if(digit == 4){
*r++ = getRoman(base);
*r++ = getRoman(5 * base);
}
else if(digit == 5){
*r++ = getRoman(5 * base);
}
else if(digit <= 8){
*r++ = getRoman(5 * base);
digit -= 5;
while(digit > 0){*r++ = getRoman(base); digit--;}
}
else if(digit == 9){
*r++ = getRoman(base);
*r++ = getRoman(10 * base);
}
return r;
}
char * decimalToRoman(int d, char * r){
int digit = d / 1000;
d %= 1000;
while(digit > 0){
*r++ = getRoman(1000);
digit--;
}
digit = d / 100;
d %= 100;
r = digitToRoman(digit, 100, r);

digit = d / 10;
d %= 10;
r = digitToRoman(digit, 10, r);
r = digitToRoman(d, 1, r);
*r = '\0';
return r;
}

【在 w****x 的大作中提到】
: 跪求roman number to integer 和 integer to roman number的程序, 特别是第一个
: ,哪个大牛帖一个??

w****x
发帖数: 2483
3

膜拜啊~~~~ 要我写int to roman就直接跪了

【在 S**I 的大作中提到】
: N久以前写的一个:
: #include
: int getDecimal(char);
: int romanToDecimal(char *);
: char getRoman(int);
: char * digitToRoman(int, int, char *);
: char * decimalToRoman(int, char *);
: int main(int argc, char* argv[]){
: printf("Roman: %s\n", argv[1]);
: int d = romanToDecimal(argv[1]);

l****c
发帖数: 782
4
我也写跪过,后来发现,不能一下一下判断的那样写。
(int to roman)看了一个方法,是吧所有的千,百,十,个位的Roman符号存在char[4]
[10][5]里面,从千位开始判断,从char[][][]里面读数写就是了,觉得比一个一个判断
直观又好看。
另外,大牛我请教下你啊,为什么要[4][10][5]呢? 最多不就是VIII吗,为什么不是4
呢,好像4真的不行。

【在 w****x 的大作中提到】
:
: 膜拜啊~~~~ 要我写int to roman就直接跪了

h****e
发帖数: 928
w****x
发帖数: 2483
6

算了, 不整这道了

【在 h****e 的大作中提到】
: 这里有:
: http://dl.dropbox.com/u/19732851/LeetCode/ReadMe.html

h****e
发帖数: 928
7
为什么?这道题可是高频题啊。

【在 w****x 的大作中提到】
:
: 算了, 不整这道了

w****x
发帖数: 2483
8

roman to int是高频, 反过不是

【在 h****e 的大作中提到】
: 为什么?这道题可是高频题啊。
l****c
发帖数: 782
9
请问在哪里找到哪些是高频题啊?

【在 h****e 的大作中提到】
: 为什么?这道题可是高频题啊。
p*****2
发帖数: 21240
10
这道题不算难题吧。
相关主题
问一个面试问题为什么我这段简单的程序segment fault
你们看过programming pearls (2nd edition English) or 正在看的同学们c++ 程序一问
C的argc问题map numbers to strings
进入JobHunting版参与讨论
p*****2
发帖数: 21240
11
看了一下int to roman 就是20多行代码吧。
w****x
发帖数: 2483
12

这个现场解释规则然后code出来不合理,所以一般应该不问的

【在 p*****2 的大作中提到】
: 看了一下int to roman 就是20多行代码吧。
h****e
发帖数: 928
13
以这样的逻辑,很多面试问题都不应该问的。:)

【在 w****x 的大作中提到】
:
: 这个现场解释规则然后code出来不合理,所以一般应该不问的

b******v
发帖数: 1493
14
如果搞明白怎么回事,还是挺简单的
只用纯字母的话,罗马数字最多表示到3000多
然后按规则分别表示千位,十位和个位就行了
Roman to int还简单些

★ 发自iPhone App: ChineseWeb 7.5

【在 w****x 的大作中提到】
:
: 这个现场解释规则然后code出来不合理,所以一般应该不问的

r********g
发帖数: 1351
15
同意roman to int比较容易和直观,int to roman主要考察归纳和分析能力吧,是不是
还有状态机什么的?可惜俺学了这么久还是不太会画,每次画了半天只有俺一个人能看
懂。

【在 w****x 的大作中提到】
: 跪求roman number to integer 和 integer to roman number的程序, 特别是第一个
: ,哪个大牛帖一个??

l*****a
发帖数: 559
16
贴一个用了map的简洁些的版本。
int romanToInt(string s) {
unordered_map m;
m["M"] = 1000;
m["CM"] = 900;
m["D"] = 500;
m["CD"] = 400;
m["C"] = 100;
m["XC"] = 90;
m["L"] = 50;
m["XL"] = 40;
m["X"] = 10;
m["IX"] = 9;
m["V"] = 5;
m["IV"] = 4;
m["I"] = 1;

int res = 0;

for(int i = 0; i < s.length();){
int value = 0; int len = 0;
for(int j = 1; j <= 3 && j <= s.length(); j++){
if(m.find(s.substr(i,j)) != m.end()){
value = m[s.substr(i,j)];
len = j;
}
}
res += value;
i += len;
}
return res;
}
l***i
发帖数: 1309
17
my code get each digit then use a switch/case for d=1 to 9
1 (共1页)
进入JobHunting版参与讨论
相关主题
懒得写了,想练手的就写写贴在这里吧bloomberg onsite & offer
BBC 编程风格面试题,求指教问一个面试问题
问个Amazon面试题你们看过programming pearls (2nd edition English) or 正在看的同学们
leetcode plus one 书上答案是不是错了?C的argc问题
罗马数字转换成十进制为什么我这段简单的程序segment fault
问个google 题c++ 程序一问
两个Amazon面试题map numbers to strings
问个关于排序的面试题Microsoft interview question
相关话题的讨论汇总
话题: int话题: digit话题: char话题: getroman话题: return