蒟蒻求助!为什么0分!

P1055 [NOIP2008 普及组] ISBN 号码

xiao_tuan_zi @ 2024-01-24 11:16:16

#include<bits/stdc++.h>
using namespace std;
int main(){
    long long i,s,a,b,c,d,m;
    char d1;
    scanf("%d-%d-%d-%c",&a,&b,&c,&d1);
    if(d1=='X'){
        d=10;
    }
    else{
        d=d1-48;
    }
    m=(a*1000+b)*100000+c;
    for(i=1;i<=9;i++){
        s+=m%10*(9-i+1);
        s%=11;
        m/=10;
    }
    if(s==d){
        cout<<"Right";
    }
    else{
        cout<<a<<'-'<<b<<'-'<<c<<'-';
        if(s==10)
            cout<<"X";
        else
            cout<<s;
    }
    return 0;
}

by midsummer_zyl @ 2024-01-24 11:24:06

@minjun

#include <bits/stdc++.h>
#define LL long long
using namespace std;
int main() {
    char a, b, c, d, e, f, g, h, i, j;
    int x;
    scanf("%c-%c%c%c-%c%c%c%c%c-%c", &a, &b, &c, &d, &e, &f, &g, &h, &i, &j);
    x = ((int(a) - 48) + (int(b) - 48) * 2 + (int(c) - 48) * 3 + (int(d) - 48) * 4 + (int(e) - 48) * 5 + (int(f) - 48) * 6 + (int(g) - 48) * 7 + (int(h) - 48) * 8 + (int(i) - 48) * 9) % 11;
    if ((x == 10) && (j == 'X')) {
        printf("Right");
        return 0;
    }
    if ((x == 10) && (j != 'X')) {
        printf("%c-%c%c%c-%c%c%c%c%c-%c", a, b, c, d, e, f, g, h, i, 'X');
        return 0;
    }
    if (x == int(j) - 48) {
        printf("Right");
        return 0;
    } else {
        printf("%c-%c%c%c-%c%c%c%c%c-%d", a, b, c, d, e, f, g, h, i, x);
        return 0;
    }
    return 0;
}

by JustPureH2O @ 2024-01-24 11:44:03

首先,用scanf读入long long时要用%lld而不是%d

其次,在写类似于你代码里s变量这种没有初始值,只有累加的变量时,一定要赋初始值为0,否则变量的存储内存位置里可能不是0导致累加出错

#include<bits/stdc++.h>
using namespace std;
int main(){
    long long i,a,b,c,d,m;
  long long s = 0; // 变量赋初始值
    char d1;
  // 此处改动%d->%lld
    scanf("%lld-%lld-%lld-%c",&a,&b,&c,&d1);
    if(d1=='X'){
        d=10;
    }
    else{
        d=d1-48;
    }
    m=(a*1000+b)*100000+c;
    for(i=1;i<=9;i++){
        s+=m%10*(9-i+1);
        s%=11;
        m/=10;
    }

    if(s==d){
        cout<<"Right";
    }
    else{
        cout<<a<<'-'<<b<<'-'<<c<<'-';
        if(s==10)
            cout<<"X";
        else
            cout<<s;
    }
    return 0;
}

|