gpt4 book ai didi

c++ - 二进制数之和(使用 C 样式字符串)

转载 作者:太空狗 更新时间:2023-10-29 22:55:11 26 4
gpt4 key购买 nike

我正在开发一个程序,通过命令行输入(argv、argc)将两个二进制数相加。它也是左对齐的。

例如:$a.out 0 1 返回 1,$a.out 10 1 返回 11 等

我正在使用一个函数来做加法,我 100% 知道我的问题出在我的函数中,但我不知道我做错了什么。当我添加两个进位为“0”的二进制数时,它不会在总和中打印“1”。我还有另一个问题,有些金额是反向打印的,但其他的不是。如果有人能指出我做错事的正确方向,我将不胜感激。

错误的总和示例:

$a.out 10 10
00 // should be "100"
$a.out 11 11
01 // should be "110"
$a.out 100 100
000 // should be "1000"
$a.out 110000 1
100011 // should be "110001"

我的功能:

bool add (const char aug[], const char add[], char sum[])
//aug is the first command line binary number (argv[1]), add is the second (argv[2])
{

char carry = '0';
int ag = strlen(augend) - 1;
int ad = strlen(addend) - 1;
int max = ((ag > ad)? ag : ad);

for (int i = 0; i <= max; ag--, ad--, i++)
{
char augDigit = (ag < 0)? '0' : augend[ag];
char addDigit = (ad < 0)? '0' : addend[ad];

switch (augDigit + addDigit + carry)
{
case '0' + '0' + '0':
sum[i] = '0';
carry = '0';
break;
case '1' + '0' + '0':
sum[i] = '1';
carry = '0';
break;
case '1' + '1' + '0':
sum[i] = '0';
carry = '1';
break;
case '1' + '1' + '1':
sum[i] = '1';
carry = '1';
break;
}
}
return true;
// returns true if the sum is less than 36 digits but I'll deal with
// that once i fix this issue
}

最佳答案

两个原因:第一个原因是您以倒序存储结果,第二个原因是您没有考虑最后一个进位。如果最后的和执行,你必须附加另一个 '1' 到结果。

关于c++ - 二进制数之和(使用 C 样式字符串),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52999885/

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