P1957题解

· · 个人记录

思路

判断

  1. 字母

如果是字母就可以输入两个整型变量,进行加减乘除然后输出

  1. 数字

如果是数字就是有一点麻烦

那么输入的第一个数就会被拆分需要考虑如何输入

有尝试过用直接输入,测试长度后再加上第一个字符,这样就能变回原来的数

但有一个缺陷

如果输入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;
}