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了,我再改一下应该能过,谢谢你。