avatar
typ 被动关卡# Money - 海外理财
y*n
1
计算一个中缀表达式,包含加减乘除,没有括号,比如:“3 + 1 / 1 *2”, return
算式的结果
avatar
g*r
2
今天收到citi的信,他们把我的thankyou preferred卡关了。 里面还有几万+的点数。
考古了,是不是只能兑成gc了? 还有没有其他好的方式?
能通过申请类似或者更高级的卡,或者其他办法保留这些点数吗?
avatar
l*8
3
5
avatar
p*n
4
为什么被关?用的太狠?
avatar
y*n
5
写了一个,感觉还是挺繁琐的,大牛有什么简单的方法吗?
http://ideone.com/wP0SXC
avatar
h*z
6
同被关,说是不用很久了

【在 g*******r 的大作中提到】
: 今天收到citi的信,他们把我的thankyou preferred卡关了。 里面还有几万+的点数。
: 考古了,是不是只能兑成gc了? 还有没有其他好的方式?
: 能通过申请类似或者更高级的卡,或者其他办法保留这些点数吗?

avatar
l*a
7
中缀转成RPN再求值,或者转的过程中直接求

【在 y***n 的大作中提到】
: 写了一个,感觉还是挺繁琐的,大牛有什么简单的方法吗?
: http://ideone.com/wP0SXC

avatar
y*n
8
有道理,再写一个试试看。
avatar
T*e
9
算了,给你贴一个: http://www.itint5.com/oj/#26
int getNumber(const string &expr, int &pos){
int num=0;
while(expr[pos]&&expr[pos]<='9'&&expr[pos]>='0'){
num=num*10+expr[pos++]-'0';
}
return num;
}
//返回表达式expr的值
int evaluate(const string& expr) {
int res=0;
int size=expr.size();
if(size==0) return res;
vector v;
int pos=0;
v.push_back(getNumber(expr, pos));
while(poschar op=expr[pos++];
int num=getNumber(expr, pos);
if(op=='+'){
v.push_back(num);
}else if(op=='-'){
v.push_back(-num);
}else{// if(op=='*'){
v[v.size()-1]*=num;
}
}
for(int i=0; ireturn res;
}
如果考虑“/”,你就再加一个else if.

【在 y***n 的大作中提到】
: 有道理,再写一个试试看。
avatar
y*n
10
这个好,收藏了。如果下次面试一道,我一定Cite 出处。
avatar
T*e
11
面试常有变形,不要照搬啊。

【在 y***n 的大作中提到】
: 这个好,收藏了。如果下次面试一道,我一定Cite 出处。
avatar
y*n
12
一变形就显示出内功不行了:-)
avatar
l*8
13
又写了一遍,供参考
int getValue(const char * &expr) {
int val;
sscanf(expr, "%d", &val);
while (isdigit(*++expr))
;

return val;
}
int evaluate(const char *expr) {
if (!expr || !*expr) return 0;

int ans = getValue(expr);
while (*expr == '*' || *expr == '/') {
if (*expr == '*')
ans *= getValue(++expr);
else
ans /= getValue(++expr);
}

return ans + evaluate(expr);
}
avatar
y*n
14
厉害,最后加了一点可以handle 解法
return *expr =='-' ? ans - evaluate(expr) : ans + evaluate(expr);
avatar
h*j
15
longway2008 的code是对的。
sscanf 正负数都可以读。
while (isdigit(*++expr))
;
这里用后加,就跳过了开始的符号位。
比如
3 - 2 - 1. 事实上longway的code会分解成
3 + (-2) + (-1)。只用加法足矣。
膜拜longway大神。
yuren的code的结果就错了,他的算的是 3 - (2 - 1).
avatar
m*k
16
这难道不是严蔚敏数据结构里的例题简化版么?

return

【在 y***n 的大作中提到】
: 计算一个中缀表达式,包含加减乘除,没有括号,比如:“3 + 1 / 1 *2”, return
: 算式的结果

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。