为什么把字符数组开大一点就可以通过了?求解

P1055 [NOIP2008 普及组] ISBN 号码

3years @ 2022-12-22 14:15:56

字符数组刚好是13时

#include<iostream>
//#include<cstdio>
using namespace std;
int main()
{
    char isbn[13]; //字符数组在这里
    scanf("%s",isbn);
    int sum=0,b=1;
    for(int i=0;i<12;i++)
    {
        if(isbn[i]-48>=0&&isbn[i]-48<=9)
        {
            sum+=(isbn[i]-48)*b;
            b++;
        }
    } 
    if(sum%11==isbn[12]-48||(sum%11==10&&isbn[12]=='X')) cout<<"Right";
    else 
    {
        if(sum%11!=10) isbn[12]=sum%11+48;
        else isbn[12]='X';
        cout<<isbn;
    }

}

然后我把字符数组开大到15后就通过了

#include<iostream>
//#include<cstdio>
using namespace std;
int main()
{
    char isbn[15];
    scanf("%s",isbn);
    int sum=0,b=1;
    for(int i=0;i<12;i++)
    {
        if(isbn[i]-48>=0&&isbn[i]-48<=9)
        {
            sum+=(isbn[i]-48)*b;
            b++;
        }
    } 
    if(sum%11==isbn[12]-48||(sum%11==10&&isbn[12]=='X')) cout<<"Right";
    else 
    {
        if(sum%11!=10) isbn[12]=sum%11+48;
        else isbn[12]='X';
        cout<<isbn;
    }
    return 0;

}

搞不懂为什么


by RP_INT_MAX @ 2022-12-22 14:18:16

@3years 一般写代码时都会把数组开大一点,我我习惯是多开 10 个,以免RE


by SkyWave @ 2022-12-22 14:26:31

@3years 还要存放一个空白符呢,所以要开到14


by Zi_Gao @ 2022-12-22 14:32:47

这么小的我一般开10倍


by E_firework @ 2022-12-22 14:44:54

字符串末尾应有 \0 结尾。


by E_firework @ 2022-12-22 14:46:27

不用这么精打细算,通常数组都要开大一点。


by 3years @ 2022-12-22 17:19:26

@SkyWave 好的,谢谢解答


by 3years @ 2022-12-22 17:19:44

@E_firework 谢谢解答


by 3years @ 2022-12-22 17:20:34

@RP_INT_MAX 好的,谢谢


|