Yemengying @ 2023-08-01 16:51:44
如果有更简洁的代码我会去看题解的,现在我认为我这个代码应该是没什么问题的。把第五个点的数据找出来再修改一下应该就过了。
Ps:是屎山代码,慎看
#include<bits/stdc++.h>
using namespace std;
int main(){
string c;
char s;
int a,b,len=2,n,b0=0,d=1;
cin>>n;
for(int i=1;i<=n;i++){
int x;
cin>>c>>a;
if(c[0]=='a'){
s=c[0];
cin>>b;
x=a+b;
cout<<a<<"+"<<b<<"="<<x<<endl;
}else if(c[0]=='b'){
s=c[0];
cin>>b;
x=a-b;
cout<<a<<"-"<<b<<"="<<x<<endl;
}else if(c[0]=='c'){
s=c[0];
cin>>b;
x=a*b;
cout<<a<<"*"<<b<<"="<<x<<endl;
}else{
int lens=c.length(),j=0;
while(j<lens){
for(int i=c.length()-1;i>j;i--) d*=10;
b0=b0+(c[j]-'0')*d;
d=1;
j++;
}
b=b0;
if(s=='a'){x=a+b;cout<<b<<"+"<<a<<"="<<x<<endl;}
if(s=='b'){x=b-a;cout<<b<<"-"<<a<<"="<<x<<endl;}
if(s=='c'){x=a*b;cout<<b<<"*"<<a<<"="<<x<<endl;}
}
if(x<0){len++;x=abs(x);}
if(x==0){len++;}
while(a!=0){len++;a/=10;}
while(b!=0){len++;b/=10;}
while(x!=0){len++;x/=10;}
cout<<len<<endl;
len=2;
b0=0;
}
return 0;
}
by sxjsxj @ 2023-08-01 16:59:42
我觉得循环里else下面那个字符串变成整数的有点怪怪的
int a;
for(i=0;i<c.length();i++)
a=a*10+c[i]-'0';
你把这个改一下,试试对不对,我再看一下
by Parrhesiates @ 2023-08-01 17:08:26
@Yemengying 当有数据为0的时候要特判,因为用这个方法求位数的话,0的位数会判为0。 比如这组
1
a 0 0
by Parrhesiates @ 2023-08-01 17:08:59
@liuyidu 下面是 a 0 0
by sxjsxj @ 2023-08-01 17:19:04
略微修改一下,AC了,求关注
#include<bits/stdc++.h>
using namespace std;
int main()
{
string c;
char s;
int a,b,len=2,n,d=1;
cin>>n;
while(n--)//while循环比for循环快
{
int x;
cin>>c;
getchar();
cin>>a;
if(c[0]>='a' && c[0]<='c')
{
s=c[0];
cin>>b;
switch(c[0])
{
case 'a':
x=a+b;
cout<<a<<"+"<<b<<"="<<x<<endl;
break;
case 'b':
x=a-b;
cout<<a<<"-"<<b<<"="<<x<<endl;
break;
case 'c':
x=a*b;
cout<<a<<"*"<<b<<"="<<x<<endl;
break;
}
}//通过简单观察,可以发现每个分支的前两行重复,可以整合在一起,再用一个switch循环更简洁
else
{
int lens=c.length();
b=0;
for(int i=0;i<lens;i++)
b=b*10+c[i]-'0';
if(s=='a'){x=a+b;cout<<b<<"+"<<a<<"="<<x<<endl;}
if(s=='b'){x=b-a;cout<<b<<"-"<<a<<"="<<x<<endl;}
if(s=='c'){x=a*b;cout<<b<<"*"<<a<<"="<<x<<endl;}
}
if(x<0){len++;x=abs(x);}
if(a==0)len++;
if(b==0) len++;
if(x==0) len++;//如果a、b、x有一个为0的话,下面的算位数就会返回0,前面要特别判断
while(a){len++;a/=10;}
while(b){len++;b/=10;}
while(x){len++;x/=10;}
cout<<len<<endl;
len=2;
}
return 0;
}
by Yemengying @ 2023-08-01 18:26:05
@liuyidu 好的,谢谢
by Yemengying @ 2023-08-01 18:26:49
@sxjsxj 谢谢大佬