wow12138 @ 2022-08-08 21:29:07
#include<bits/stdc++.h>
using namespace std;
int sz(string a,int b,int c){//函数作用:将字符串a中第b项到第c项的数转化为int型数据,方便运算。
int d=0;
for(int i=b;i<=c;i++){
d=d*10;
d=d+a[i]-'0';
}
return d;
}
int main(){
int n,flag=1;//n表示n个算式;flag用来表示运算符号,值为1、2、3分别表示加减乘。
cin>>n;
string a[n];//a[i]为记录的字符串。
getline(cin,a[0]);//输入n有回车,需要这行保证真正的a[0]不会读错。
for(int i=0;i<=n-1;i++){
getline(cin,a[i]);
}
for(int i=0;i<=n-1;i++){
if(a[i][0]=='a'){
flag=1;
}
if(a[i][0]=='b'){
flag=2;
}
if(a[i][0]=='c'){
flag=3;
}//查看运算符号。
int d=0,e=0,f,g,h;//d、e用来标记第一个数的开头、结尾在字符串中的位置;
//f、g、h分别记录输入的两个数和结果;
//比如:a 12 13中d、e分别为2(a[2]=1)、3(a[3]=2),f、g、h分别为12、13、25。
for(int j=0;;j++){
if(a[i][j]>='0'&&a[i][j]<='9'){
d=j;
break;
}
}
for(int j=d+1;;j++){
if(a[i][j]==' '){//第一个数结束后下一位必然是' ',借此得出e。
e=j-1;
break;
}
}
f=sz(a[i],d,e);//计算f。
g=sz(a[i],e+2,a[i].size()-1);//第二个数必然始于第一个数结尾后2位,终于字符串末尾。
cout<<f;
if(flag==1){//根据flag输出对应的符号并算出h。
cout<<'+';
h=f+g;
}
if(flag==2){
cout<<'-';
h=f-g;
}
if(flag==3){
cout<<'*';
h=f*g;
}
int x=h,count=0;//x即h,因为h还要输出,值不能变,用x代替进行运算;count计算位数。
if(x<0){//h若是负数,负号占一位。
count++;
}
while(x!=0){//算出h的位数。
x=x/10;
count++;
}
cout<<g<<'='<<h<<endl<<-d+1+a[i].size()+count<<endl;
//总长度=[e-d+1](第一个数)+[(a[i].size-1)-(e+2)+1](第二个数)+[count](第三个数)+2(负号)=上式
}
return 0;}
by wow12138 @ 2022-08-08 21:32:26
现在的情况是:10个数据点全错。。。
我把第一个数据点下了下来,是:
输入:
1
a 99 999
输出:
99+999=1098
11
而洛谷显示我在第一行第六个数字输出为5(应为9)
但我在自己编译器上却没有问题
以及样例输入输出也没问题
是代码本身有问题还是洛谷的问题?请大佬帮忙看看,再次感谢!
by zhou_reset_qihao @ 2022-08-08 21:37:27
你这题编号多少
by zhou_reset_qihao @ 2022-08-08 21:37:52
我帮你交一下然后帮你看
by wow12138 @ 2022-08-08 23:41:57
@ZQHyyds123
P1957(抱歉回晚了,之前有点事)
by zhou_reset_qihao @ 2022-08-09 23:05:32
没事
by zhou_reset_qihao @ 2022-08-09 23:05:58
你现在还是错的吗
by zhou_reset_qihao @ 2022-08-09 23:27:23
洛谷有些问题
by zhou_reset_qihao @ 2022-08-09 23:27:55
那里是if(x<=0) count++;
by zhou_reset_qihao @ 2022-08-09 23:28:39
其他的没问题,但是洛谷还是显示错误
by zhou_reset_qihao @ 2022-08-09 23:29:32
你把那个点看一下,洛谷评测机坏了,你程序除了那个之外没问题了