时间: 1000ms / 空间: 131072KiB / Java类名: Main
描述
给出一个表达式,其中运算符仅包含+,-,要求求出表达式的最终值
保证数据中不会出现负数,并且同时保证,如果你按从左到右的顺序计算,同样也不会出现负数的情况。
保证数据中不会出现负数,并且同时保证,如果你按从左到右的顺序计算,同样也不会出现负数的情况。
输入格式
仅一行,即为表达式
输出格式
仅一行,既为表达式算出的结果
测试样例1
输入
1+1-1
输出
1
备注
表达式总长度<=255
表达式中数字位数<=255
表达式中数字位数<=255
举个例子:5247+823-299-11
7 4 2 5
3 2 8
-9 -9 -2
-1 -1
= 0 -4 8 5
最后看哪一位上>=10或者<0,在进行借位和进位的运算。第二个数-4小于0,就给他加上10,前面的8减去1,结果就是0675,逆序输出得到5760.
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
char b[260],s[260];
int a[260][260];
void add(int x,int y)
{
int i;
for(i=0; i<256; i++)
a[y][i]=a[x][i]+a[y][i];
}
void mult(int x,int y)
{
int i;
for(i=0; i<256; i++)
a[y][i]=a[x][i]-a[y][i];
}
int main()
{
int i,j,k,n,m;
while(gets(s))
{
memset(a,0,sizeof(a));
int len=strlen(s);
int p=0,q=0;
for(i=len-1; i>=0; i--)
{
if(s[i]=='+'||s[i]=='-')
{
b[q++]=s[i];
p=0;
}
else a[q][p++]=s[i]-'0';
}
for(j=q-1; j>=0; j--)
{
if(b[j]=='+')
add(j+1,j);
else mult(j+1,j);
}
for(i=0; i<256; i++)
{
if(a[0][i]<0)
{
while(a[0][i]<0)
{
a[0][i]+=10;
a[0][i+1]-=1;
}
}
else if(a[0][i]>=10)
{
while(a[0][i]>=10)
{
a[0][i]-=10;
a[0][i+1]+=1;
}
}
}
int f=0;
for(i=256; i>=0; i--)
{
if(a[0][i]>0)
{
k=i;
f=1;
break;
}
}
if(f==0)
printf("0");
else
for(i=k; i>=0; i--)
printf("%d",a[0][i]);
printf("\n");
}
return 0;
}