我们被要求创建将十进制数转换为二进制数并将整数作为输入但必须将字符串作为输出的函数。如何将数组存储到一个字符串中?
string DecToBin(int num)
{
string res;
for (int n = 15; n >= 0; n--)
{
if ((num - pow(2, n)) >= 0)
{
res[n] = 1;
num -= pow(2, n);
}
else
{
res[n] = 0;
}
}
for (int n = 15; n >= 0; n--)
{
res[n];
}
}
答案 0 :(得分:1)
您只需返回字符串
return res;
就是这样。
答案 1 :(得分:1)
你可以这样做,
#include <iostream>
#include <string>
std::string foo(int n)
{
std::string s;
while(n > 0){
s += n%2 == 0 ? '0' : '1';
n = (n >> 1);
}
return std::string(s.rbegin(), s.rend());
}
int main()
{
int n = 13;
std::cout << foo(n) << std::endl;
return 0;
}
打印
1101
答案 2 :(得分:1)
由于你已经找到了如何返回结果的答案,我在字符串的生成中添加了一个补充。
作为替代方案,您可以包含<climits>
,它会为您提供CHAR_BIT
,然后通过例如计算位数:
#include <climits>
int bits = CHAR_BIT * sizeof(int);
或者您可以使用<limits>
并说出类似的内容:
#include <limits>
int bits = std::numeric_limits<int>::digits;
然后它只是从结束开始循环:
string int2bitstr(int n)
{
int bits = numeric_limits<int>::digits;
string s;
int i;
for (i = bits - 1; i >= 0; --i)
并说出类似的话:
s += n & (1 << i) ? '1' : '0';
或:
s += (n >> i) & 1 ? '1' : '0';
或比特(没有双关语)更快:
s += ((n >> i) & 1) + '0';
最后一项工作的原因是因为将字形0
的字符值添加到数字0或1 - 实际上是给出了&#39; 0&#39;或者&#39; 1&#39;。
答案 3 :(得分:0)
添加
return res;
到你的功能结束。