some_ICE_ANK @ 2023-06-06 21:32:15
全WA,下载数据1能过,评测过不了
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main(){
int t;
scanf("%d\n",&t);
int flag;
for(int q=1;q<=t;q++){
string a;
getline(cin,a);
int len=a.length();
if(a[0]>='a' && a[0]<='z'){
flag=a[0]-'a'+1;
}
int n=0,m=0;
int i=0;
if(a[0]>='a' && a[0]<='z'){
i=2;
}
for(;a[i]!=' ';i++){
n*=10;
n+=a[i]-'0';
}
i++;
for(;i<len;i++){
m*=10;
m+=a[i]-'0';
}
int ans;
cout<<n;
if(flag==1){
cout<<'+';
ans=n+m;
}else if(flag==2){
ans=n-m;
cout<<'-';
}else{
ans=n*m;
cout<<'*';
}
cout<<m<<'='<<ans<<endl;
int cnt=0;
cnt+=len+1;
if(a[0]>='a' && a[0]<='z'){
cnt-=3;
}else{
cnt--;
}
cnt+=1;
if(ans<0){
cnt++;
}
do{
cnt++;
ans/=10;
}while(ans!=0);
cout<<cnt<<endl;
}
return 0;
}
by XSean @ 2023-06-06 21:47:17
@ANK_INK_sans en...同学,你样例,也没有过呢
by XSean @ 2023-06-06 22:03:43
将
for(;i<len;i++){
m*=10;
m+=a[i]-'0';
}
改为
for(;i<len-1;i++){
m*=10;
m+=a[i]-'0';
}
by XSean @ 2023-06-06 22:09:17
@ANK_INK_sans
同学,你知道为什么吗,解答:
使用getline时请注意:它会直接读取到字符串的换行符,就是len
假如读取a 64 46
看似7实则8
总结:注意自己的输入方式
by Zzzcr @ 2023-06-06 22:26:13
@Sean_xzx 问题是这么改了之后还是会wa的,可以自己用洛谷ide试下
我原本以为改成这样就行
for (; i < len - (q != t); i++)
{
m *= 10;
m += a[i] - '0';
}
附上第一组数据
Input:
1
a 99 999
Output:
99+999=1098
11
结果诡异的是洛谷ide过了,交上去还是wa的
by XSean @ 2023-06-06 22:39:33
@Zzzcr 是啊,我再看看
by XSean @ 2023-06-06 22:44:03
@Zzzcr 我的想法是本题的测评机或许比较特殊
by XSean @ 2023-06-07 07:57:36
@ANK_INK_sans 代码中有错误解释
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main(){
int t;
scanf("%d\n",&t);
int flag;
for(int q=1;q<=t;q++){
string a="";
//getline(cin,a);不使用getline,因为容易读写到空格或空行
cin>>a;//先输入第一个
//int len=a.length();去掉
if(a[0]>='a' && a[0]<='z'){
flag=a[0]-'a'+1;
}
int n=0,m=0;
int i=0;
string b="",c="";//定义b,c
cin>>b;//先输入第二个
if(a[0]>='a' && a[0]<='z'){
i=2;
cin>>c;//如果a是字母输入第三个
}
a+=" "+b+((c!="")?" ":"")+c;//将a合并,并看看后面还有没有c这个数,判断条件((c!="")?" ":"")如果c!="",说明c有数,就+“ ”,否则+“”
int len=a.length();//重新算len,结束
for(;a[i]!=' ';i++){
n*=10;
n+=a[i]-'0';
}
i++;
for(;i<len;i++){
m*=10;
m+=a[i]-'0';
}
int ans;
cout<<n;
if(flag==1){
cout<<'+';
ans=n+m;
}else if(flag==2){
ans=n-m;
cout<<'-';
}else{
ans=n*m;
cout<<'*';
}
cout<<m<<'='<<ans<<endl;
int cnt=0;
cnt+=len+1;
if(a[0]>='a' && a[0]<='z'){
cnt-=3;
}else{
cnt--;
}
cnt+=1;
if(ans<0){
cnt++;
}
do{
cnt++;
ans/=10;
}while(ans!=0);
cout<<cnt<<endl;
}
return 0;
}
by some_ICE_ANK @ 2023-06-07 18:06:30
谢谢老师