时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M 热度指数:3016
校招时部分企业笔试将禁止编程题跳出页面,为提前适应,练习时请使用在线自测,而非本地IDE。
题目描述
解析加减法运算
如:
输入字符串:"1+2+3" 输出:"6"
输入字符串:"1+2-3" 输出:"0"
输入字符串:"-1+2+3" 输出:"4"
输入字符串:"1" 输出:"1"
输入字符串:"-1" 输出:"-1"
已知条件:输入的运算都是整数运算,且只有加减运算
要求:输出为String类型,不能使用内建的eval()函数
输入描述:
输入字符串:"1+2+3"
输出描述:
输出:"6"
示例1
输入
1+2+3
输出
6
解题思路:
由于该字符串的加减法是如下形式a(操作符)b(操作符)c.....,由此我们先计算出第一个数字a,然后遍历整个字符串,当遇到一个'+'号时,就把'+'号后面的字符串字符转化成数字,直到当前字符为'+'或者'-'或者字符串尾截止,然而如果遇到一个'-'号字符,则将'-'号后面的字符转化成数字并加上其相反数
代码:
#include<bits/stdc++.h>
using namespace std;
char str[100010];
int main()
{
while(scanf("%s",str)!=EOF)
{
int len=0,flag=0,len1=0;
if(str[0]=='-')
{
for(int i=1; str[i]!='-'&&str[i]!='+'&&i<strlen(str); i++)
{
len1=i;
flag=flag*10+(str[i]-'0');
}
flag=-flag;
len1++;
}
else
{
for(int i=0; str[i]!='-'&&str[i]!='+'&&i<strlen(str); i++)
{
flag=flag*10+(str[i]-'0');
}
}
for(int i=len1; i<strlen(str); i++)
{
int num=0;
if(str[i]=='+'||str[i]=='-')
{
for(int j=i+1; str[j]!='+'&&str[j]!='-'&&j<strlen(str); j++)
{
num=num*10+(str[j]-'0');
}
if(str[i]=='+')flag+=num;
else flag-=num;
}
}
cout<<flag<<endl;
}
return 0;
}