C++ 90分求助

P1957 口算练习题

Pusder @ 2022-11-06 23:39:04

想到原因可能是有几行输入是

a 11 22

1 123

然后就想不到怎么处理输入两个数时第一个数只有一位的情况了

#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
int weishu(int i)//位数
{
    int k=0,m=i;
    if(i==0) return 1;
    for(;i!=0;k++)
    {
        i/=10;
    }
    if(m<0) {return (k+1);}
    else return k;
}
int main()
{
    int n;
    cin>>n;
    char aaa[n];
    int bbb[n][2];
    for(int i=0;i<n;i++)
    {
        cin>>aaa[i];
        if(aaa[i]=='a'||aaa[i]=='b'||aaa[i]=='c')
        {
            cin>>bbb[i][0]>>bbb[i][1];
        }
        else
        {
            cin>>bbb[i][0]>>bbb[i][1];
            bbb[i][0]+=(aaa[i]-48)*pow(10,weishu(bbb[i][0]));//aaa[i]-48是因为a码里面0对应48
            aaa[i]=aaa[i-1];
        }
    }
    for(int i=0;i<n;i++)
    {
        switch (aaa[i])
        {
        case 'a':
            cout<<bbb[i][0]<<"+"<<bbb[i][1]<<"="<<bbb[i][0]+bbb[i][1]<<endl;
            cout<<weishu(bbb[i][0])+weishu(bbb[i][1])+weishu(bbb[i][0]+bbb[i][1])+2<<endl;
            break;
        case 'b':
            cout<<bbb[i][0]<<"-"<<bbb[i][1]<<"="<<bbb[i][0]-bbb[i][1]<<endl;
            cout<<weishu(bbb[i][0])+weishu(bbb[i][1])+weishu(bbb[i][0]-bbb[i][1])+2<<endl;
            break;
        default:
            cout<<bbb[i][0]<<"*"<<bbb[i][1]<<"="<<bbb[i][0]*bbb[i][1]<<endl;
            cout<<weishu(bbb[i][0])+weishu(bbb[i][1])+weishu(bbb[i][0]*bbb[i][1])+2<<endl;
            break;
        }
    }
    system("pause");
    return 0;
}

by __LYY_p @ 2022-11-07 09:49:00

可以用string读入,stringstream强制转整形运算


by shysacscsc @ 2022-11-18 22:13:23

每次循环开始cin>>arr[i];不对吧,每一次的第一个不一定是字符啊


by shysacscsc @ 2022-11-19 10:36:18

当数据为104的时候,1被拿走当字符了,这时候b为4;结果为14


by Pusder @ 2022-12-13 22:17:47

@shysacscsc 的确,开头是数字的时候,如果十位数不是0,那么结果没问题,但十位数是0的情况,104+100直接给我变成了14+100了,我再改一下应该能过,谢谢你。


|