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

标签 c++ binary

我正在编写一个程序,将两个二进制数(最多 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/

相关文章:

C++混淆for循环中重新声明变量的范围

c++编译器如何知道参数是STL容器?

c++ - 单精度和 double 类型转换给出不同的答案

c++ - 链接时找不到 C++ 库,编译 `boost::program_options` 示例时出错

ios - 提交ipa到应用商店

python - 横向排列十六进制

c++ - "or"和 "||"之间的区别

C 编程 - 将整数转换为二进制

c++ - 如何从二进制文件中读取 double 并将其保存在 vector 中

c# - 消息奇偶校验