#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int* countBits(int n)
{
int arr[] = {0};
for (int i = 0; i <= n; i++)
{
int j = i;
int val = 0;
for (;j; )
{
if (j & 1)
{
val++;
}
j >> 1;
}
arr[i] = val;
}
int* p = arr;
return p;
}
int main()
{
int n = 0;
printf("请输入n的值:");
scanf("%d", &n);
int* arr = countBits(n);
for (int i = 0; i <= n; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
改成j=j>>1;就可以了,但是函数出了另一个新问题,main中接受到子函数传参时数组arr内值都是对的,循环打印arr,i=0;的时候,arr[0]是对的,当arr[0]输出完后,arr[1]值跳变成其他的值了
函数功能,给定一个整数 n, 返回一个大小为 n+1 的 result 数组,其中 result[i] 是 i 的二进制表示中位为 1 的个数 (0 <= i <= n)。
详细过程如下图:
i=0时:
懵逼了,求大佬扶一下。
=========================================更新============================================
由于数组定义在栈上,故在子函数调用完毕后释放了;此时修改为malloc申请的空间,在主函数中接收使用后主动释放;