加减设计

给出一个表达式,其中运算符仅包含+,-,要求求出表达式的最终值 保证数据中不会出现负数,并且同时保证,如果你按从左到右的顺序计算,同样也不会出现负数的情况。

仅一行,即为表达式

仅一行,既为表达式算出的结果

表达式总长度< =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); 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值