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

C++ C++;删除二进制数组中的前导零,c++,binary,C++,Binary,我正在制作一个程序,将两个二进制数(最多31位)相加,并以二进制形式输出总和 我的每件事都很好,但我需要删除解决方案的前导零 这就是我的输出: char c[32]; int carry = 0; if(carry == '1') { cout << carry; } for(i = 0; i < 32; i++) { cout << c[i]; } charc[32]; 整数进位=0; 如果(进位='1') { 不能在同一索引上使用两个for

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

我的每件事都很好,但我需要删除解决方案的前导零

这就是我的输出:

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

for(i = 0; i < 32; i++)
{
    cout << c[i]; 
}
charc[32];
整数进位=0;
如果(进位='1')
{

不能在同一索引上使用两个for。第一个for在==0时迭代,第二个for从第一个for停止的位置开始打印。

您不应该有那个内部循环(内部
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
,而不指示最左边的位是进位,可以是:

  • 二携带;或者
  • 6不带行李
最后一个块确保您对值0有一些输出,否则将不打印任何内容,因为没有1位

我将让您决定是输出进位和值之间的分隔符(并保留该行注释),还是使用进位强制
打印
最初为true。这两个选项分别是:

if carry is 1:
    output '1 '
以及:


,而且,既然你已经在评论中转换为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;
}
#包括
内部主(空)
{
int i;
整数进位=0;
INTC[]={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,0,0,1,0};
bool print=false;
//这是您在注释中给出的代码,稍作修改。
//VVVV
如果(进位==1){

std::cout like this?;如果(carry='1'){cout@Blake,我将您在上一条评论中发布的代码插入到源文件中,并且工作正常。请参阅更新。谢谢!我必须将其更改为if(c[I]='1'),因为c[32]是一个字符,然后它工作完美!@ Prave-是的,我大部分都做了,我就是不知道如何去除前导零可能不是一个有用的答案,但漂亮的C++,所以你仍然得到我的+1。
if carry is 1:
    output 1
    set printing to true
#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;
}
const char * begin = std::find(c, c+32, '1');
size_t len = c - begin + 32;
std::cout.write(begin, len);