60分,本地能过洛谷不行

P1957 口算练习题

Sqytih @ 2024-07-03 14:15:52

下载的第七个数据点和题目给的一样,这个点本地能过洛谷不行.

我看在讨论区中说scanf不行,但我写cin呢?

是由于\n\r的问题吗?

对于我用cin输入应该怎么解决?

这种情况会在正式比赛出现吗?

还请各位大佬解惑

关于代码的一点解释:

在输入abc还是数字处理方面的思路是先都存在一个string里通过判断string[0]是不是a||b||c,如果是另外输入两个数字,反之将string里的转化成数字并再输入另一个数字.

代码中的len( )作用是求整数的位数, trans( )作用将string中的数字转成int数字.

代码如下:

#include <iostream>
#include <string.h>
using namespace std;

char mode;
int n; 

int len(int a){ 
    if(a == 0) return 1;
    int l = 0;
    while(a > 0){
        l++;
        a /= 10;
    }
    return l;
}

int trans(char a[100], int l){
    int re;
    for(int i = 1; i <= l; i++){
        int now = int(a[i])-48;
        re += now;
        re *= 10;
    }
    return re/10;
}

int main( ){
    cin >> n;
    while(n > 0){
        int num1, num2;
        string in;  
        cin >> in;
        if(in[0]=='a'||in[0]=='b'||in[0]=='c'){
            mode = in[0];
            cin >> num1 >> num2;
        }else{
            //in(string) -> num1(int)
            char cnum[100];
            for(int i = 0; i < in.length(); i++){
                cnum[i+1] = in[i];
            }
            num1 = trans(cnum, in.length());
            cin >> num2;
        }

        if(mode == 'a'){
            cout << num1 << "+" << num2 << "=" << num1+num2 << endl;
            if(n == 1){
                cout << len(num1)+len(num2)+len(num1+num2)+2;
                return 0;
            }
            cout << len(num1)+len(num2)+len(num1+num2)+2 << endl;
        }
        if(mode == 'b'){
            if(num1-num2 < 0){
                cout << num1 << "-" << num2 << "=" << num1-num2 << endl;
                if(n == 1){
                    cout << len(num1)+len(num2)+len(num2-num1)+3;
                    return 0;
                }
                cout << len(num1)+len(num2)+len(num2-num1)+3 << endl;
            }else{
                cout << num1 << "-" << num2 << "=" << num1-num2 << endl;
                if(n == 1){
                    cout << len(num1)+len(num2)+len(num1-num2)+2;
                    return 0;
                }
                cout << len(num1)+len(num2)+len(num1-num2)+2 << endl;
            }
        }
        if(mode == 'c'){
            cout << num1 << "*" << num2 << "=" << num1*num2 << endl;
            if(n == 1){
                cout << len(num1)+len(num2)+len(num1*num2)+2;
                return 0;
            }
            cout << len(num1)+len(num2)+len(num1*num2)+2 << endl;
        }

        n--;

    }//while 
    return 0;
}

下载的第七个数据:

本地结果:

测评数据: [https://www.luogu.com.cn/record/163756685]()


by suyi1111 @ 2024-07-05 13:05:53

@Sqytih 第19行re没初始化,改了就A了


by suyi1111 @ 2024-07-05 13:06:32

本地可能会自动初始化为0,Linux(洛谷的评测环境)则不会


by Sqytih @ 2024-07-07 09:19:45

@suyihang ooo原来这样 谢谢佬


|