gpt4 book ai didi

将十进制数的每一位转换为相应的二进制数

转载 作者:太空宇宙 更新时间:2023-11-04 01:04:25 25 4
gpt4 key购买 nike

我需要将字符串“12345678”转换为值 00010010001101000101011001111000(二进制值只有左边没有零)。所以我用 c 语言编写了这段代码,问题是当我运行它时它什么都不做,就像有错误一样等待,直到我手动停止它。有什么想法吗?

#include <stdio.h>
#include <string.h>

void reduce(char string[]) {
int i=0, j=0, k=0, cnt=0, tmp=4, num;
char arr[4], result[4*strlen(string)];
for (i=0; i<strlen(string); i++) {
num = atoi(string[i]);
while (num != 0) {
arr[j++] = num%2;
num = num/2;
tmp--;
}
while (tmp != 0) {
arr[j++] = 0;
tmp--;
}
j--;
for (k=i*4; k<(i*4+4); k++) {
result[k++] = arr[j--];
}
j = 0;
tmp = 4;
}
printf("The result is: \n");
for (i=0; i<4*strlen(result); i++) {
printf("%d",result[i]);
}
printf("\n");
}

int main() {
char c[8] = "12345678";
reduce(c);
return 0;
}

最佳答案

您的代码中有很多小错误,这使得很难查明单个错误。主要问题似乎是您混淆了二进制数 (0, 1) 和 ASCII 数字 ("0", "1") 并且误用了字符串函数。

  1. 如其他地方所述,char c[8] = .. 是错误的。
  2. atoi(string[i]) 无法工作;它需要一个 string,而不是 char。使用 `num = string[i]-'0';
  3. arr[..] 获取值'num%2,即一个数值。最好使用'0'+num%2 这样它就是一个字符串。
  4. 您在 result[k++] 中递增 k,在一个已经递增 k
  5. 的循环中
  6. 在打印前的末尾添加 result[k] = 0;,这样 strlen 就可以正常工作了
  7. 4*strlen(result) 太多了——strlen 就是这样。
  8. 你不妨做一个简单的 printf("%s\n", result);
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void reduce(char string[]) {
int i=0, j=0, k=0, cnt=0, tmp=4, num;
char arr[5], result[4*strlen(string)+1];
for (i=0; i<strlen(string); i++) {
num = string[i]-'0';
while (num != 0) {
arr[j++] = '0'+num%2;
num = num/2;
tmp--;
}
while (tmp != 0) {
arr[j++] = '0';
tmp--;
}
arr[j] = 0;
j--;
for (k=i*4; k<(i*4+4); k++) {
result[k] = arr[j--];
}
j = 0;
tmp = 4;
}
result[k] = 0;
printf("The result is: \n");
for (i=0; i<strlen(result); i++) {
printf("%c",result[i]);
}
printf("\n");
}

int main() {
char c[] = "12345678";
reduce(c);
return 0;
}

..导致

The result is: 
00010010001101000101011001111000

关于将十进制数的每一位转换为相应的二进制数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27400423/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com