c++删除二进制数组中的前导零
C++ removing leading zeros in a binary array
我正在编写一个程序,将两个二进制数(最多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无进位
最后一个块确保您有值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;
}
const char * begin = std::find(c, c+32, '1');
size_t len = c - begin + 32;
std::cout.write(begin, len);
对同一索引使用两个fors。第一个for语句在== 0时迭代,第二个for语句从第一个语句停止的地方开始打印。
相关文章:
- 试图删除二进制树C
- C 试图删除二进制树并将其移至矢量
- 在二进制文件中删除记录
- 在二进制搜索树中删除节点
- 如何从二进制搜索树中删除节点
- AVL二进制树旋转和删除树的C 问题
- 从C++二进制搜索树中删除一个节点(类而非结构)
- 无法从二进制搜索树中删除叶子
- 二进制树搜索删除节点复杂性
- 无法从我创建的 c 二进制程序中删除记录
- 原始二进制树删除与复制问题(改进解释)
- C++:使用std::ifstream读取二进制文件后删除缓冲区/指针时发生访问冲突
- 二进制搜索树删除而无需复制
- 使用条带是否删除二进制文件上的RTTI信息
- c++删除二进制数组中的前导零
- 正在删除二进制搜索树中具有两个子节点的节点
- 删除二进制搜索树中的函数
- C++删除二进制树中的最小元素
- C++删除二进制树中的最小元素
- 删除二进制字符串中的第一个0