ASaltyFish @ 2020-11-30 17:51:18
#include<bits/stdc++.h>
using namespace std;
int len(int x)//判断位数
{
int len=0;
if(x<0)
{
x*=-1;
len++;
}
while(x>0)
{
x/=10;
len++;
}
return len;
}
int main()
{
int n;
scanf("%d",&n);
getchar();//读取第一个回车
char r;//r用来存放运算符
for(int p=1;p<=n;p++)
{
char s[20];//s用来存放整行输入
char x[10],y[10];//x,y用来存放两个数字
memset(y,0,sizeof(y));//清空x y数组
memset(x,0,sizeof(x));
gets(s);
if(s[0]<='z'&&s[0]>='a')//判断第一个字符是不是字母
{
//如果是,则开始存放两个数字
r=s[0];
int k=0;
int i=1;
for(i=2;i<strlen(s);i++)//存放第一个数字
{
if(s[i]!=' ')//遇到空格就停止读入
x[k++]=s[i];
else break;
}
for(i=i+1,k=0;i<strlen(s);i++)//存放第二个数字
y[k++]=s[i];
}
else//如果第一位不是字母,说明运算符为上一行的运算符,直接开始存数字
{
int k=0;
int i=0;
for(i=0;i<strlen(s);i++)//与上同理
{
if(s[i]!=' ')
x[k++]=s[i];
else break;
}
for(i=i+1,k=0;i<strlen(s);i++)
y[k++]=s[i];
}
int x1=atoi(x),y1=atoi(y);//用x1,y1来存两个数的整型形式
//atoi用来转字符型为整型
if(r=='a')
printf("%d+%d=%d\n%d",x1,y1,x1+y1,len(x1)+len(y1)+len(x1+y1)+2);//+2是加的运算符和等于号
if(r=='c')
printf("%d*%d=%d\n%d",x1,y1,x1*y1,len(x1)+len(y1)+len(x1*y1)+2);
if(r=='b')
printf("%d-%d=%d\n%d",x1,y1,x1-y1,len(x1)+len(y1)+len(x1-y1)+2);
if(p<n) printf("\n");
}
return 0;
}
by wmy_goes_to_thu @ 2020-11-30 17:59:50
别用gets了
by ASaltyFish @ 2020-11-30 19:08:05
@wangmaohua20090908 啊,问题就出在gets上吗...
by ASaltyFish @ 2020-11-30 19:45:00
换成cin.getline试了一下,还是爆0啊/(ㄒoㄒ)/~~