gpt4 book ai didi

C++ base 10 to base 2逻辑错误

转载 作者:行者123 更新时间:2023-11-28 07:23:39 30 4
gpt4 key购买 nike

我正在做一个将数字从 10 进制转换为 2 进制的基本程序。我得到了这段代码:

#include <cstdlib>
#include <iostream>
#include <stdlib.h>
#include <stdio.h>

using namespace std;

int main()
{
int num=0, coc=0, res=0, div=0;
printf ("Write a base 10 number\n");
scanf ("%d", &num);
div=num%2;
printf ("The base 2 value is:\n");
if(div==1)
{
coc=num/2;
res=num%2;
while(coc>=1)
{
printf ("%d", res);
res=coc%2;
coc=coc/2;
}
if(coc<1)
{
printf ("1");
}
}
else
{
printf ("1");
coc=num/2;
res=num%2;
while(coc>=1)
{
printf ("%d", res);
res=coc%2;
coc=coc/2;
}
}
printf ("\n");
system ("PAUSE");
return EXIT_SUCCESS;
}

某些数字一切都很好,但是,如果我尝试将数字 11 转换为基数 2,我得到 1101,如果我尝试 56,我得到 100011...我知道这是一个逻辑问题,我仅限于基本算法和函数:(...有什么想法吗?

最佳答案

你可以使用它,它更简单、更干净:。使用 std::reverse 来自 <algorithm>反转结果。

#include <algorithm>
#include <string>
using namespace std;

string DecToBin(int number)
{
string result = "";

do
{
if ( (number & 1) == 0 )
result += "0";
else
result += "1";

number >>= 1;
} while ( number );

reverse(result.begin(), result.end());
return result;
}

然而,即使是更干净的版本也可能是:

#include<bitset>

void binary(int i) {
std::bitset<8*sizeof(int)> b = i;
std::string s = b.to_string<char>();
printf("\n%s",s.c_str());
}

使用上面的结果

binary(11);
binary(56);

00000000000000000000000000001011

00000000000000000000000000111000

甚至更好:

#include <iostream>

void binary(int i) {
std::bitset<8*sizeof(int)> b = i;//assume 8-bit byte,Stroustrup "C++..."&22.2
std::cout<<b;
}

关于C++ base 10 to base 2逻辑错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19071243/

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