给出一个表达式,其中运算符仅包含+,-,要求求出表达式的最终值 保证数据中不会出现负数,并且同时保证,如果你按从左到右的顺序计算,同样也不会出现负数的情况。
仅一行,即为表达式
仅一行,既为表达式算出的结果
表达式总长度< =255 表达式中数字位数< =255
样例输入
1+1-1
样例输出
1
高精度计算,加和减分别利用两个函数来求(主要是怕弄混了),加和减区别不大.
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
char a[256]={0};
char b[256]={0};
char c[256]={0};
void jia()
{
int x,y;
x=strlen(a);
y=strlen(b);
char zs[256]={0};
int z=255;
int t;
x--;
y--;
z--;
while(x!=-1||y!=-1)
{
if (x==-1)
t=b[y]-'0';
else if (y==-1)
t=a[x]-'0';
else
t=a[x]-'0'+b[y]-'0';
t+=zs[z];
if(t>=10)
{
zs[z]=t%10;
zs[z-1]=t/10;
}
else
{
zs[z]=t;
}
zs[z]+=48;
if(x!=-1)
{
x--;
}
if(y!=-1)
y--;
z--;
}
if(zs[z]==0)
z++;
else
zs[z]+=48;
strcpy(a,zs+z);
}
void jian()
{
int x,y;
x=strlen(a);
y=strlen(b);
char zs[256]={0};
int z=255;
int t;
x--;
y--;
z--;
while(x!=-1||y!=-1)
{
t=a[x]-'0'-b[y]+'0';
if (y==-1)
t=a[x]-'0';
if(t<0)
{
a[x-1]--;
a[x]+=10;
t=a[x]-'0'-b[y]+'0';
zs[z]=t;
}
else
{
zs[z]=t;
}
zs[z]+=48;
x--;
if(y!=-1)
y--;
z--;
}
if(zs[z]==0)
z++;
else
zs[z]+=48;
strcpy(a,zs+z);
}
int main()
{
int i;
gets(c);
int x=0,y=0,z;
z=strlen(c);
for(i=0;c[i];i++)
{
if(c[i]=='+'||c[i]=='-')
break;
a[x++]=c[i];
}
a[x]=0;
for(;c[i];i++)
{
if(c[i]=='+')
{
while(c[++i]!='+'&&c[i]!='-'&&c[i])
{
b[y++]=c[i];
}
b[y]=0;
jia();
y=0;
i--;
continue;
}
if(c[i]=='-')
{
while(c[++i]!='+'&&c[i]!='-'&&c[i])
{
b[y++]=c[i];
}
b[y]=0;
jian();
y=0;
i--;
continue;
}
b[y++]=c[i];
}
puts(a);
}