gpt4 book ai didi

C++删除二进制数组中的前导零

转载 作者:行者123 更新时间:2023-11-30 03:05:49 25 4
gpt4 key购买 nike

我正在编写一个程序,将两个二进制数(最多 31 位)相加并以二进制形式输出和。

我的一切都很好,但我需要从解决方案中删除前导零。

这是我的输出:

char c[32];
int carry = 0;
if(carry == '1')
{
cout << carry;
}

for(i = 0; i < 32; i++)
{
cout << c[i];
}

我试过了,但没用:

char c[32];
int carry = 0;
bool flag = false;

if(carry == '1')
{
cout << carry;
}

for(i=0; i<32; i++)
{
if(c[i] != 0)
{
flag = true;

if(flag)
{
for(i = 0; i < 32; i++)
{
cout << c[i];
}
}
}
}

如有任何想法或建议,我们将不胜感激。

编辑:感谢大家的投入,我让它工作了!

最佳答案

你不应该有那个内循环(在 if(flag) 内)。它干扰了外层循环的i处理。

此时您要做的就是在设置了标志的情况下输出字符。

最重要的是,位的打印应该在第一位的检测之外。

以下伪代码显示了我将如何处理此问题:

set printing to false
if carry is 1:
output '1:'

for each bit position i:
if c[i] is 1:
set printing to true
if printing:
output c[i]

if not printing:
output 0

可能需要更改第一段代码以准确输出带进位的数字。例如,如果您最终得到值 2 和一个进位,您可能想要:

1:10                              (or some other separator)
100000000000000000000000000000010 (33 digits)

简单地输出 110 而没有指示最左边的位是进位可以是:

  • 2 进位;或
  • 6 无进位

最后一个 block 确保您有一些值 0 的输出,否则将不打印任何内容,因为没有 1 位。

我将由您决定是应该在进位和值之间输出一个分隔符(并将该行注释掉)还是使用进位来强制 printing 最初为 true。这两个选项分别是:

if carry is 1:
output '1 '

和:

if carry is 1:
output 1
set printing to true

而且,既然您已经在评论中完成了到 C++ 的转换,那应该没问题。你说它不起作用,但我输入了你的代码并且它工作正常,输出 10:

#include <iostream>

int main(void)
{
int i;
int carry = 0;
int c[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0};
bool print = false;

// This is the code you gave in the comment, slightly modified.
// vvvvvv
if(carry == 1) {
std::cout << carry << ":";
}

for (i = 0; i < 32; i++) {
if (c[i] == 1) {
print = true;
}

if (print) {
std::cout << c[i];
}
}
// ^^^^^^

std::cout << std::endl;

return 0;
}

关于C++删除二进制数组中的前导零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7439306/

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