#include <iostream> #include <string> using namespace std; void toBinary(unsigned long n, string& bin) { if (n / 2 != 0) { toBinary(n / 2, bin); } bin += to_string(n % 2); // 将余数转换为字符串并添加到 bin 变量末尾 } int GetLongestNum(long num) { string bin = ""; toBinary(num, bin); cout << bin << endl; return bin.length(); } int main() { long num = 123456789; int len = GetLongestNum(num); cout << "Length of binary number: " << len << endl; return 0; }
时间: 2024-01-28 18:03:43 浏览: 176
这段代码是将一个长整型数转换为二进制数并输出,并返回二进制数的长度。
具体实现过程如下:
1. 定义一个字符串变量 `bin` 用于存储转换后的二进制数。
2. 调用函数 `toBinary` 将长整型数转换为二进制数并存储到 `bin` 变量中。
3. 输出 `bin` 变量的值。
4. 返回 `bin` 变量的长度。
`toBinary` 函数是一个递归函数,其作用是将一个无符号长整型数转换为二进制数并存储到字符串变量 `bin` 中。具体实现过程如下:
1. 如果当前数字除以2的商不为0,则递归调用 `toBinary` 函数继续将商转换为二进制数。
2. 将当前数字除以2的余数(0或1)添加到字符串变量 `bin` 的末尾。
以下是对这段代码的改进:
1. `toBinary` 函数的参数应该为 `unsigned long` 类型,以支持更大的整数。
2. 在 `toBinary` 函数中,当数字为0时应该特殊处理,否则会导致输出结果出错。
3. 在 `toBinary` 函数中,将余数添加到字符串变量 `bin` 的末尾时,可以使用 `+=` 运算符代替字符串拼接操作。
4. 在 `main` 函数中,可以使用 `auto` 关键字自动推导变量类型,使代码更简洁。
改进后的代码如下:
```c++
#include <iostream>
#include <string>
using namespace std;
void toBinary(unsigned long n, string& bin) {
if (n == 0) return; // 特殊处理数字为0的情况
toBinary(n / 2, bin);
bin += to_string(n % 2); // 将余数添加到字符串变量 bin 的末尾
}
int GetLongestNum(unsigned long num) {
string bin = "";
toBinary(num, bin);
cout << bin << endl;
return bin.length();
}
int main() {
unsigned long num = 123456789;
auto len = GetLongestNum(num);
cout << "Length of binary number: " << len << endl;
return 0;
}
```
输出结果为:
```
111010110111100110100010101
Length of binary number: 27
```
阅读全文