提交不对,本地正确?

P1957 口算练习题

L2022211395 @ 2022-12-16 01:03:19

#include<stdio.h>
#include<string.h>
#include<ctype.h>
int change(char str[],int a,int b);//将字符转化成整数
int len(int num);//计算数字长度
int main()
{
    int n;//输入n组数
    int i=1;
    int y=0;
    int a;
    int b;
    int result;
    int num1;
    int num2;
    int l=0;
    char ch;
    scanf("%d",&n);
    getchar();
    char str[100];
    for(i=1;i<=n;i++)
    {
        gets(str);//每次读入一个字符串
        if(str[0]>='a'&&str[0]<='c')//判断首个字符是否为字母
        {
            ch=str[0];//存下上一次的字母,以便下次使用
            if(str[0]=='a')
            {
                a=2;
                for(y=2;str[y]!=' ';y++)
                {
                    b=y;
                }
                l=b-a+1;
                num1=change(str,a,b);//a,b分别为数字的起始位置
                a=b+2;
                for(y=b+2;str[y]!='\0';y++)
                {
                    b=y;
                }
                l=l+b-a+1;
                num2=change(str,a,b);
                result=num1+num2;
                l=l+len(result);
                l=l+2;//l为总长度
                printf("%d+%d=%d\n",num1,num2,result);
                printf("%d",l);
            }
            if(str[0]=='b')
            {
                a=2;
                for(y=2;str[y]!=' ';y++)
                {
                    b=y;
                }
                l=b-a+1;
                num1=change(str,a,b);
                a=b+2;
                for(y=b+2;str[y]!='\0';y++)
                {
                    b=y;
                }
                l=l+b-a+1;
                num2=change(str,a,b);
                result=num1-num2;
                l=l+len(result);
                if(result>=0)
                {
                    l=l+2;
                }
                else
                l=l+3;
                printf("%d-%d=%d\n",num1,num2,result);
                printf("%d",l);
            }
            if(str[0]=='c')
            {
                a=2;
                for(y=2;str[y]!=' ';y++)
                {
                    b=y;
                }
                l=b-a+1;
                num1=change(str,a,b);
                a=b+2;
                for(y=b+2;str[y]!='\0';y++)
                {
                    b=y;
                }
                l=l+b-a+1;
                num2=change(str,a,b);
                result=num1*num2;
                l=l+len(result);
                l=l+2;
                printf("%d*%d=%d\n",num1,num2,result);
                printf("%d",l);
            }
        }
        else
        {
            a=0;
            for(y=0;str[y]!=' ';y++)
            {
                b=y;
            }
            l=b-a+1;
            num1=change(str,a,b);
            a=b+2;
            for(y=b+2;str[y]!='\0';y++)
            {
                b=y;
            }
            l=l+b-a+1;
            num2=change(str,a,b);
            if(ch=='a')//ch为上一次输入的运算方式
            {
                result=num1+num2;
                l=l+len(result);
                l=l+2;
                printf("%d+%d=%d\n",num1,num2,result);
                printf("%d",l);
            }
            if(ch=='b')
            {
                result=num1-num2;
                l=l+len(result);
                if(result>=0)
                {
                    l=l+2;
                }
                else
                l=l+3;
                printf("%d-%d=%d\n",num1,num2,result);
                printf("%d",l);
            }
            if(ch=='c')
            {
                result=num1*num2;
                l=l+len(result);
                l=l+2;
                printf("%d*%d=%d\n",num1,num2,result);
                printf("%d",l);
            }
        }
        if(i!=n)
        {
            printf("\n");
        }
    }
    return 0;
}
int change(char str[],int a,int b)
{
    int i=b;
    int count=1;
    int num=0;
    while(i>=a)
    {
        num=num+(str[i]-'0')*count;
        count=count*10;
        i--;
    }
    return num;
}
int len(int num)
{
    int l=0;
    if(num==0)
    l=1;
    else
    {
        while(num!=0)
    {
        num=num/10;
        l++;
    }
    }
    return l;
}

by AToj123 @ 2022-12-16 04:27:03

在 main 函数里定义变量,有的编译器会随机赋初始值,你本地估计初始化了 0

把定义丢到主函数上面试试?


by AToj123 @ 2022-12-16 04:28:47

(但是这个年代还有人用 C 语言?

(无恶意,表示惊讶)


by Eleveslaine @ 2022-12-16 07:31:25

这代码好长啊
sscanf是个好东西


by ZQIN_P @ 2022-12-16 07:40:54

c++有sscanf吗?


by REMAC @ 2022-12-16 08:12:57

@planet_over_for_ever 显然是有的,我有一年cspj最后一题那个IP地址的,就是sscanf。

大部分c函数cpp都是支持的。


by ZQIN_P @ 2022-12-16 08:15:24

@REMAC 好的,感谢


|