求求了看了三天了

P1055 [NOIP2008 普及组] ISBN 号码

peng_yu_yan @ 2021-10-31 16:15:19

#include <cstring>
#include <iostream>
using namespace std;
int main(){char c[13];int j=1;int numb;
cin>>c;char n;
for(int i=0;i<11;i++){
if(c[i]!='-'){numb=(c[i]-'0')*j++;}}
int m=numb%11;
if(m!=10){ n=m;}
else{ n='X';}

if(c[12]==n){cout<<"Right"<<endl;}
else{c[12]=n+'0';cout<<c<<endl;}

return 0;
}

by ud2_ @ 2021-10-31 16:17:21

字符串有 13 个字符,char[13] 怎么存得下?


by peng_yu_yan @ 2021-10-31 16:23:33

@ud2_ 改过之后也不可啊


by xiongjunxiang @ 2021-10-31 16:29:07

橙名怎么还误导人呢?

没有问题


by xixike @ 2021-10-31 16:34:37

@20021222dd 一共 5 个问题。

  1. numb 没有初值。

  2. numb=(c[i]-'0')*j++; 这一行应该是 +=

  3. if(m!=10){ n=m;} 应为 n = m + '0';

  4. 相应的输出的时候 c[12]=n+'0'; 应为 c[12] = n;

  5. 这个我也不是很理解,字符数组开小了,开大一个就够 c[14]


by xixike @ 2021-10-31 16:36:37

反正以后数组不要正好开到数据范围,多开 10 或 20 个的。


by peng_yu_yan @ 2021-10-31 16:37:19

@xixike 谢谢大哥


by peng_yu_yan @ 2021-10-31 16:38:57

@xixike 为啥要多开


by xiongjunxiang @ 2021-10-31 16:40:03

#include <cstring>
#include <iostream>
using namespace std;
char c[13];//数组应该是全局变量
int main(){
    int j=1;int numb=0;//numb要初值
    cin>>c;char n;
    for(int i=0;i<11;i++){
    if(c[i]!='-'){numb+=/*+=*/(c[i]-'0')*j++;}}
    int m=numb%11;
    if(m!=10){ n=m+'0'/*移到这个位置*/;}
    else{ n='X';}

    if(c[12]==n){cout<<"Right"<<endl;}
    else{c[12]=n;cout<<c<<endl;}

    return 0;
}

by ud2_ @ 2021-10-31 16:41:33

@20021222dd

为啥要多开

C 字符串以 0 结尾,比如读入样例 1 后 c 的内容其实是 {'0', '-', '6', '7', '0', '-', '8', '2', '1', '6', '2', '-', '4', 0 }。注意 '0'0 不一样。


by xixike @ 2021-10-31 16:42:04

@20021222dd 啊,我给忘了,这位巨佬 @xiongjunxiang 写的很对,字符数组以及字符串最好放到全局变量,放函数里的话经常出现为题,具体为什么我也不清楚 QwQ


| 下一页