您的位置:首页 > 编程语言 > PHP开发

对论坛一个华为题的回答

2011-10-28 11:17 232 查看
                   对论坛一个华为题的回答

                  Horin | horin153@msn.com

今天上班看见了一个帖子: http://topic.csdn.net/u/20111025/23/18936b47-d9b0-48db-a49a-97c2be52fad5.html
正好今天有空, 就试着做了下. 根据题意, 就是代码不需要做算法无关的检查, 仅需要体现算法思路即可. 出题者做了这么多要求, 很可能就是希望答题者不要把问题复杂化, 才可能在短时间内写出算法代码来. 有了这些限制, 仅需要每次取一个运算符和一个运算数就可以进行循环处理了.

个人点评: 该算法时间效率不会是最好的, 但空间占用可能是最好的. 体现的就是 c/c++ 语言的基本功.

#include <assert.h>
#include <stdio.h>

int cal(int c1, char op, int c2)
{
if (op=='+') return c1+c2;
if (op=='-') return c1-c2;
if (op=='*') return c1*c2;
if (op=='/') return c1/c2;
return 0;
}

int calculate(int len, char *expStr)
{
assert(expStr);
if (len < 3) return -1;
char *p = expStr;
int c1 = p[0]-'0';
char op = p[1];
int c2 = p[2]-'0';
p += 3;
while(*p) {
if (*p=='*' || *p=='/') {
c2 = cal(c2, *p, p[1]-'0');
} else {
c1 = cal(c1, op, c2);
op = *p;
c2 = p[1]-'0';
}
p += 2;
}
return cal(c1, op, c2);
}

int main(void)	{
int ret1 = calculate(3, "1+2");
int ret2 = calculate(11, "1+2*3/5-6*7");
int ret3 = calculate(11, "1+2-3/5-6*7");
printf ("values: %d, %d, %d", ret1, ret2, ret3);

return 0;
}

// output:
// values: 3, -40, -39
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  华为 算法 c output 语言