Redian新闻
>
现在还有Serve卡相关的deal吗?
avatar
现在还有Serve卡相关的deal吗?# Money - 海外理财
w*x
1
跪求roman number to integer 和 integer to roman number的程序, 特别是第一个
,哪个大牛帖一个??
avatar
L*S
2
没有意识到Serve卡可以用来买amazon gc和costco gc
avatar
S*I
3
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的程序, 特别是第一个
: ,哪个大牛帖一个??

avatar
L*S
4
rt

【在 L*S 的大作中提到】
: 没有意识到Serve卡可以用来买amazon gc和costco gc
avatar
w*x
5

膜拜啊~~~~ 要我写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]);

avatar
y*i
6
did you get $50 direct deposit bonus?

【在 L*S 的大作中提到】
: 没有意识到Serve卡可以用来买amazon gc和costco gc
avatar
l*c
7
我也写跪过,后来发现,不能一下一下判断的那样写。
(int to roman)看了一个方法,是吧所有的千,百,十,个位的Roman符号存在char[4]
[10][5]里面,从千位开始判断,从char[][][]里面读数写就是了,觉得比一个一个判断
直观又好看。
另外,大牛我请教下你啊,为什么要[4][10][5]呢? 最多不就是VIII吗,为什么不是4
呢,好像4真的不行。

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

avatar
L*S
8
我没有试,想问问是不是可以。。。

【在 y****i 的大作中提到】
: did you get $50 direct deposit bonus?
avatar
h*e
11
为什么?这道题可是高频题啊。

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

avatar
w*x
12

roman to int是高频, 反过不是

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

【在 h****e 的大作中提到】
: 为什么?这道题可是高频题啊。
avatar
p*2
14
这道题不算难题吧。
avatar
p*2
15
看了一下int to roman 就是20多行代码吧。
avatar
w*x
16

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

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

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

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

★ 发自iPhone App: ChineseWeb 7.5

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

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

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

avatar
l*a
20
贴一个用了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;
}
avatar
l*i
21
my code get each digit then use a switch/case for d=1 to 9
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。