简单计算器

简单计算器

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 11042    Accepted Submission(s): 3590


Problem Description
读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。
 


 

Input
测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。
 


 

Output
对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。
 


 

Sample Input
1 + 2 4 + 2 * 5 - 7 / 11 0
 


 

Sample Output
3.00 13.36
 


 

Source

#include<iostream>
#include<string.h>
#include<math.h>
using namespace std;
int main()
{
 char ch[2000],c[1000];
 int a;
 double num[1000];
 while(gets(ch))
 {
  int k=0,j=0,i;
  int flag=0,flag1=0;
  int head=0,wear=0;
  double zsum=0;
  a=strlen(ch);
  if(a==1&&ch[0]=='0')
   break;
  for(i=0;i<a;i++)
    
   if(ch[i]>='0'&&ch[i]<='9'&&flag==0)
   {
    flag=1;                                             //这里是记有多少个字符数字的,刚开始用head记录
    head=i;     
   }
   if(ch[i]>='0'&&ch[i]<='9')
   {
    wear=i;                                   //这里是也是记录的,最后一个用wear;
    if(ch[i+1]==' '||ch[i+1]=='\0')
    {
     int sum=0;     
     for(int p=head;p<=wear;p++)
     {
      ch[p]-=48;
      sum=sum+ch[p]*pow(10,wear-p);       //这里的pow是那个字符的10的几次方,加起来
        
     num[k++]=sum;
     flag=0;    
      
   }

   if(ch[i]=='+'||ch[i]=='-'||ch[i]=='*'||ch[i]=='/')
   {
    c[j++]=ch[i];
   }
   
      
  }
  for(i=0;i<j;i++)
  {
   if(c[i]=='*'||c[i]=='/')
   {
    if(c[i]=='/')
   {
    num[i+1]=num[i]/num[i+1];
     if(c[i-1]=='-')            //例如4-5*6+3   那样5*6是得正整数,没有加前面的负号,所以就要就要加上负号
     num[i+1]=-num[i+1];
    num[i]=0;
   }
    else
    {
     num[i+1]=num[i]*num[i+1];
    if(c[i-1]=='-')                     //例如4-5*6+3   那样5*6是得正整数,没有加前面的负号,所以就要就要加上负号
     num[i+1]=-num[i+1];
    num[i]=0;
    }
   }
   
  }
  for(i=0;i<j;i++)
  {
   if(c[i]=='-')
   {
    num[i]=num[i]-num[i+1];
    num[i+1]=0;
   }
  }
  for(i=0;i<k;i++)
  
  zsum=zsum+num[i];
  }
  printf("%.2lf\n",zsum);
 }
 return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值