蒟蒻求助!为什么0分!

P1055 [NOIP2008 普及组] ISBN 号码

@[minjun](/user/1169273) ```cpp #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 midsummer_zyl @ 2024-01-24 11:24:06


首先,用`scanf`读入`long long`时要用`%lld`而不是`%d`。 其次,在写类似于你代码里`s`变量这种没有初始值,只有累加的变量时,一定要赋初始值为$0$,否则变量的存储内存位置里可能不是`0`导致累加出错 ```cpp #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; } ```
by JustPureH2O @ 2024-01-24 11:44:03


|