您的位置:首页 > 其它

题目1019:简单计算器

2015-09-23 16:40 295 查看
几组测试用例

2 / 2 / 2

2 - 2 - 2

1 * 2 + 1 + 1 * 2 * 3 / 3 - 1 + 2 / 1 = 6.00

1 / 7 / 3 * 7 * 3 = 1.00

37 - 97 * 90 + 17 * 70 + 50 + 93 - 63 / 29 * 31 * 61 * 61 - 92 + 44 + 98 - 5 - 28 * 38 + 63 - 13 / 31 / 26 / 5 - 29 + 55 / 40 / 26 = -258935.05

减法和除法没有交换律

#include <iostream>

#include <stack>

#include <malloc.h>

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

using namespace std;

int getline_(char s[],int lim){

int c,i;

i=0;

while((c=getchar())!=EOF&&c!='\n'&&i<lim-1)

s[i++]=c;

s[i]='\0';

return i;

}

int getline2_(char s[],int lim){

int c,i;

i=0;

while((c=getchar())!=EOF&&c!='\n'&&i<lim-1)

s[i++]=c;

if(c==EOF&&i==0)

return -1;

s[i]='\0';

return i;

}

int getline3_(char s[],int lim){

int c,i;

i=0;

while((c=getchar())!=EOF&&c!='\n'&&i<lim-1)

s[i++]=c;

if(c==EOF&&i==0)

return -1;

if(i==1&&s[0]=='0')

{

return -1;

}

s[i]='\0';

//cout<<"i= "<<i<<endl;

return i;

}

int calcluate(char *s,int len)

{

double s11[200];

char s22[200];

int top1=0;

int top2=0;

double num =0;

int a;

char c;

int count =0;

int pos=0;

char tmp[100];

double number1,number2;

for(int i=0;i<len;i++)

{

memset(tmp,0,100);

if(s[i] == ' ')

{

count++;

if(count%2 == 1)

{

//cout<<"count = "<<count<<endl;;

memcpy(tmp,&s[pos],i-pos);

tmp[i-pos]='\0';

//cout<<"tmp = "<<tmp<<endl;

a = atoi(tmp);

//cout<<"a = "<<a<<endl;

s11[top1++]=a;

pos = i+1;

}

else

{

c = s[i-1];

if((c == '+'||c == '-') && (s22[top2-1]=='*'||s22[top2-1]=='/'))//1 + 2 * 3 - 4

{

while(top2>0)

{

number1 = s11[top1-2];

number2 = s11[top1-1];

if(s22[top2-1]=='+') num = number1 + number2;

if(s22[top2-1]=='-') num = number1 - number2;

if(s22[top2-1]=='*') num = number1 * number2;

if(s22[top2-1]=='/') num = number1 / number2;

//cout<<"->"<<s22[top2-1]<<endl;

//cout<<"->num = "<<num<<" number1 = "<<number1<<" number2 = "<<number2<<endl;

s11[top1-2] = num;

top1--;

top2--;

}

}

if((c=='-'||c=='+') && s22[top2-1]=='-')//栈顶为减号 清栈

{

number1 = s11[top1-2];

number2 = s11[top1-1];

num = number1 - number2;

s11[top1-2] = num;

top1--;

top2--;

}

if((c=='/'||c=='*') && s22[top2-1]=='/')//栈顶为减号 清栈

{

number1 = s11[top1-2];

number2 = s11[top1-1];

num = number1 / number2;

s11[top1-2] = num;

top1--;

top2--;

}

pos = i+1;

s22[top2++]=c;

}

}

if(i == len-1)

{

memcpy(tmp,&s[pos],i-pos+1);

tmp[i-pos+1]='\0';

a = atoi(tmp);

s11[top1++]=a;

}

}

/*cout<<"look stack1 data top1= "<<top1<<endl;

for(int j=0;j<top1;j++)

cout<<s11[j]<<" ";

cout<<"\nlook stack2 data top2= "<<top2<<endl;

for(int j=0;j<top2;j++)

cout<<s22[j]<<" ";

cout<<endl;

cout<<"计算结果\n";*/

while(top2>0)

{

number1 = s11[top1-2];

number2 = s11[top1-1];

//cout<<"-<"<<s22[top2-1]<<endl;

if(s22[top2-1]=='+') num = number1 + number2;

if(s22[top2-1]=='-') num = number1 - number2;

if(s22[top2-1]=='*') num = number1 * number2;

if(s22[top2-1]=='/') num = number1 / number2;

//cout<<"-<num = "<<num<<" number1 = "<<number1<<" number2 = "<<number2<<endl;

s11[top1-2] = num;

top1--;

top2--;

}

printf("%0.2f\n",s11[top1-1]);

}

int main()

{

char *seq = (char*)malloc(200);

while(getline3_(seq,200)!= -1)

{

calcluate(seq,strlen(seq));

}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: