提交都是WA,可本地运行没有问题,帮忙指点一下

P1957 口算练习题

kkhll @ 2023-01-06 18:03:55

P1957 口算练习题

#include<stdio.h>
#include<math.h>
#include<string.h>
char str[1000][1000],a[1000],b[1000];
int c[1000][1000];
int main() {
 int i,j,k,n,q,m,l,p,x,y;
 scanf("%d\n",&n);
 for(i=1; i<=n; i++)
 {
  //scanf("%c",&str[i][0]);
  //if(str[i][0]<='9')
  for(j=0;j<11;j++)
  {
   scanf("%c",&str[i][j]);
   if(str[i][j]=='\n')
   break;
  }
 }
 for(i=1; i<=n; i++) {
  q=0;
  l=0;
  k=0;
  while(str[i-q][0]<='9'&&str[i-q][0]>='0') {
   q++;
  }
  m=strlen(str[i]);
  if(q==0) {
   for(j=2; j<m; j++) {
    if(str[i][j]==' ')
     break;
    a[l]=str[i][j];
    l++;
   }
   for(j+=1; j<m; j++) {
    if(str[i][j]=='\n')
     break;
    b[k]=str[i][j];
    k++;
   }
  } else {
   for(j=0; j<m; j++) {
    if(str[i][j]==' ')
     break;
    a[l]=str[i][j];
    l++;
   }
   for(j+=1; j<m&&str[i][j]!='\n'; j++) {
    b[k]=str[i][j];
    k++;
   }
  }
  p=1;
  for(j=l-1;j>=0;j--)
  {
   c[i][0]+=(a[j]-'0')*p;
   p*=10;
  }
  p=1;
  for(j=k-1;j>=0;j--)
  {
   c[i][1]+=(b[j]-'0')*p;
   p*=10;
  }
  if(str[i-q][0]=='a')
  {
   c[i][2]=c[i][0]+c[i][1];
   x=c[i][2];
   c[i][3]=l+k+2;
   while(x>0)
   {
    x/=10;
    c[i][3]+=1;
   }
   printf("%d+%d=%d\n%d\n",c[i][0],c[i][1],c[i][2],c[i][3]);
  }
  if(str[i-q][0]=='b')
  {
   c[i][2]=c[i][0]-c[i][1];
   if(c[i][2]>=0)
   c[i][3]=l+k+2;
   else
   c[i][3]=l+k+3;
   x=abs(c[i][2]);
   while(x>0)
   {
    x/=10;
    c[i][3]+=1;
   }
   printf("%d-%d=%d\n%d\n",c[i][0],c[i][1],c[i][2],c[i][3]);
  }
  if(str[i-q][0]=='c')
  {
   c[i][2]=c[i][0]*c[i][1];
   x=abs(c[i][2]);
   c[i][3]=l+k+2;
   while(x>0)
   {
    x/=10;
    c[i][3]+=1;
   }
   printf("%d*%d=%d\n%d\n",c[i][0],c[i][1],c[i][2],c[i][3]);
  }
 }
 return 0;
}

by _8008008 @ 2023-01-07 09:02:47

末尾有' '


by mooktian @ 2023-01-08 16:21:14

我也是一样的,样例没问题,看测试数据也对,就是0分。

#include<bits/stdc++.h>
using namespace std;
int a,b,c,na,nb,nc;//a,b是要运算的数,c是运算后的结果
                       //na是a的位数,nb,nc是b和c的位数
int nbits(int n) {
    int ans;
    if(n<0) ans=1;
    else ans=0;
    while(n) {
        n/=10;
        ans++;
    }
    return ans;
}
int main(){
    string s;
    char ch;
    int p,q;//要运算的数从字符串的p位置开始,q位置结束
    int n;
    cin>>n;
    cin.get();
    for(int i=1;i<=n;i++) {
        getline(cin,s);
        if(s[0]=='a'||s[0]=='b'||s[0]=='c') {ch=s[0];p=2;}
        else p=0;
        if(ch=='a') ch='+';
        if(ch=='b') ch='-';
        if(ch=='c') ch='*';
        int j=p;//读取a,第一个运算的数
        while(s[j]!=' ') 
            j++;
        q=j;
        na=q-p;//数字a的位数
        for(int k=p;k<q;k++) 
        a+=(s[k]-'0')*pow(10,q-k-1);
        p=q+1;//读取b,第二个运算的数
        q=s.size();
        nb=q-p;
        for(int k=p;k<q;k++) 
        b+=(s[k]-'0')*pow(10,q-k-1);
        switch(ch) {//计算
            case '+':
            c=a+b;
            break;
            case '-':
            c=a-b;
            break;
            case '*':
            c=a*b;
            break;
        }
        nc=nbits(c);
        cout<<a<<ch<<b<<'='<<c<<endl<<na+nb+nc+2;
        a=0;b=0;c=0;
    }
}

by mooktian @ 2023-01-08 21:00:27

@kkhll 输入方式调整下。


|