求解,为何本地的测试结果和在线IDE上的不同?

P1957 口算练习题

koppe @ 2021-04-17 16:52:19

本地样例和自测以及下载的数据都在本地能过,为什莫上了洛谷就炸了,裂开。 求大佬指点.

char str[30];
int x=0;
int y=0;
void g(char* s){
    int i=0;
    int loc=1;
    int len=strlen(s);
    x=0;y=0;
    char* p=strstr(s," ");//定位空格 
for(i=p-s+1;s[i]!=' ';i++){
    loc++;
}
int k=loc-1;
for(i=p-s+1;i<p-s+loc;i++){
     x+=(s[i]-'0')*pow(10,k-1);//计算数字 
     k--;
}
for(i=p-s+loc+1;i<len;i++){

    y+=(s[i]-'0')*pow(10,len-i-1);//同上 
}
}
void f(char* u){
    x=0;y=0;
    char* p=strstr(u," ");
int k=p-u;
int i;
int len=strlen(u);
    for(i=0;i<p-u;i++){
        x+=(u[i]-'0')*pow(10,k-1);
        k--;
    }for(i=p-u+1;i<strlen(u);i++){
        y+=(u[i]-'0')*pow(10,len-i-1);
    }
}
int h(int k){
    int flag;
        int cnt=0;
    if(k<0){
        flag=1;
    }else if(k==0){
        flag=0;
        cnt=1;
    }else {
        flag=0;
    }

    while(k){
        k/=10;
        cnt++;
    }
    return cnt+flag;//计算位数的函数 
}
int main()
{
int i=0;
int n;
int flag=0;
int bia=0;
scanf("%d",&n);
int j=0;
getchar();
for(i=0;i<n;i++){
    gets(str);
    getchar;
    switch(str[0]){
        case 'a':  g(str);
        end1:
        printf("%d+%d=%d\n",x,y,x+y);printf("%d\n",h(x)+h(y)+2+h(x+y));flag=1;break;
        case 'c':g(str);
        end2:
        printf("%d*%d=%d\n",x,y,x*y);printf("%d\n",h(x)+h(y)+2+h(x*y));flag=2;break;
        case 'b':g(str);
        end3:
            printf("%d-%d=%d\n",x,y,x-y);
        printf("%d\n",h(x)+h(y)+h(x-y)+2);flag=3;break;
        default:f(str);if(flag==1){
            goto end1;
        }else if(flag==2){
            goto end2;
        }else{
            goto end3;
        }
    }
}

    return 0;
 } 

by _caiji_ @ 2021-04-17 16:55:06

@koppe 这题数据的换行是 \r\n 而不是 \n


by koppe @ 2021-04-17 19:51:49

@caijianhong 谢谢大佬,不过为什么修改后,前几行都正确但是最后一行,最后一个字符读不进来


by koppe @ 2021-04-17 20:48:20

@caijianhong 已过,谢谢~


|