请问为什么数据大了之后结果就不对了

输入两个正整数 m 和 k,其中 1

img

n要初始化成n[100],不要初始化成"a"
你只给他分配2字节长度,后面都越界了
越界了那么这个内存就不是给数组分配的,而是其他变量申请的内存
当其他变量改变的时候,内存里的数据被改了,你还把它当数组里的数据来用
能不出错吗

#include<iostream> 
#include<cstring>
using namespace std;
int main(){
    char n[17];//若用n[]="a",则等效n[2]="a",下标可能越界,n[17]可防止越界
    int k,x=0;
    cin>>n>>k;
    for(unsigned i=1;i<=strlen(n);i++){//strlen()采用unsigned返回结果,为避免警告,建议使用unsigned
        if(n[i-1]=='3')
            x++;
    }
    if(x==k)
        cout<<"YES"<<endl;
    else
         cout<<"NO"<<endl;
    return 0;
}

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^