P1957题解
思路
- 根据输入可以考虑先输入第一个字符
判断
- 字母
如果是字母就可以输入两个整型变量,进行加减乘除然后输出
- 数字
如果是数字就是有一点麻烦
那么输入的第一个数就会被拆分需要考虑如何输入
有尝试过用直接输入,测试长度后再加上第一个字符,这样就能变回原来的数
但有一个缺陷
如果输入1024,一个字符输入后会变成024,此时再按整型变量输入便会输入24;
考虑到如此便可以当成字符串输入再转换为整型变量
如下
int char_change_int(){
int as=0;
for(int i=len-1,j=0;i>=0;++j,--i){
as+=(s[i]-'0')*pow(10,j);
}
return as;
}
完整代码
#include<cstdio>
#include<cmath>
#include<cstring>
#include<iostream>
using namespace std;
char cn;
char c,pd;
int a,b;
int len,n;
char s[1111];
int int_change_char_long(int x) {
int l=1;
while(x/=10) ++l;
return l;
}
int char_change_int(){
int as=0;
for(int i=len-1,j=0;i>=0;++j,--i){
as+=(s[i]-'0')*pow(10,j);
}
return as;
}
void PRint_S(char x)
{
int ab;
if(x=='a') {
printf("%d+%d=%d\n",a,b,a+b);
ab=a+b;
len+=int_change_char_long(ab);
len+=2;
printf("%d",len);
} else if(x=='b') {
printf("%d-%d=%d\n",a,b,a-b);
ab=a-b;
if(a<b) ++len;
len+=int_change_char_long(ab);
len+=2;
printf("%d",len);
} else if(x=='c') {
printf("%d*%d=%d\n",a,b,a*b);
ab=a*b;
len+=int_change_char_long(ab);
len+=2;
printf("%d",len);
}
}
int main() {
scanf("%d",&n);
for(int i=1; i<=n; ++i) {
cin>>c;
if(c>='a' && c<='c') pd=c;
len=0;
if(c>='0' && c<='9'){
scanf("%s%d",s,&b);
len=strlen(s);
a=char_change_int();
a+=(c-'0')*pow(10,len);
++len;
len+=int_change_char_long(b);
PRint_S(pd);
}
else if(pd>='a' && pd<='c'){
scanf("%d%d",&a,&b);
len+=int_change_char_long(a);
len+=int_change_char_long(b);
PRint_S(pd);
}
a=b=0;
if(i!=n) printf("\n");
}
return 0;
}