AsirAsirasir 2023-10-12 16:54 采纳率: 40%
浏览 3
已结题

关于在转换二进制时的c++数组问题

int a[5];
int num1=0,num2=0;
for(int i=1;i<=1000;i++){
    int x=i;
    memset(a,0,sizeof(a));
    while(x!=0){
        a[x%2]++;
        x=x/2;
    }
    if(a[1]>a[0]) num1++;
    else num2++;
}
cout<<num1<<"   "<<num2<<endl;
return 0; 

在定义数组a[]时候,a[0]结果是174 0 a[1]是1000 0 到a[2]才是正常结果,为什么

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-10-12 19:04
    关注

    【以下回答由 GPT 生成】

    问题分析:

    在这段代码中,有一个数组a用于存储转换后的二进制数的结果,数组的下标表示对应位置上的数字。我们期望将数组元素初始化为0,然后在转换过程中根据余数对应索引位置上的元素进行递增。但是通过代码运行后发现,数组a的结果不正确,a[0]a[1]不为0。

    问题原因:

    这个问题是由于对数组a的初始化方法不正确导致的。在这段代码中使用了memset(a, 0, sizeof(a))来将数组a的所有元素初始化为0。但是这种方法只适用于charint等简单的数据类型,并不适用于int数组。

    解决方案:

    为了正确初始化数组a,可以使用循环遍历将所有元素赋值为0。以下是修复后的代码:

    int a[5];
    int num1=0, num2=0;
    
    for(int i=1; i<=1000; i++){
        int x=i;
        for(int j=0; j<5; j++){
            a[j] = 0;
        }
    
        while(x!=0){
            a[x%2]++;
            x=x/2;
        }
    
        if(a[1]>a[0]){
            num1++;
        } else{
            num2++;
        }
    }
    
    cout<<num1<<"   "<<num2<<endl;
    return 0;
    

    通过使用循环来初始化数组a,可以确保数组的所有元素都被正确赋值为0。运行修复后的代码,即可得到正确的结果。



    【相关推荐】



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

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 10月15日
  • 创建了问题 10月12日

悬赏问题

  • ¥15 BP神经网络控制倒立摆
  • ¥20 要这个数学建模编程的代码 并且能完整允许出来结果 完整的过程和数据的结果
  • ¥15 html5+css和javascript有人可以帮吗?图片要怎么插入代码里面啊
  • ¥30 Unity接入微信SDK 无法开启摄像头
  • ¥20 有偿 写代码 要用特定的软件anaconda 里的jvpyter 用python3写
  • ¥20 cad图纸,chx-3六轴码垛机器人
  • ¥15 移动摄像头专网需要解vlan
  • ¥20 access多表提取相同字段数据并合并
  • ¥20 基于MSP430f5529的MPU6050驱动,求出欧拉角
  • ¥20 Java-Oj-桌布的计算