这段代码存在一些问题,需要进行修正:
1. 在计算2进制数转换成10进制数的过程中,ten应该使用long long int类型,否则可能出现整数溢出的问题。
2. 在将10进制数转换成3进制数的过程中,可以使用除3取余的方法,不必像现在一样先求出10进制数再转换成3进制数。
3. 在读入数据时,可以使用getline()函数来读入一个完整的字符串,不必使用cin和ignore()函数结合使用。
修正后的代码如下所示:
++#include <iostream>#include <vector>#include <string>using namespace std;string to23(string x){ long long int ten = 0; for (int i = x.length()-1; i>=0; i--) { ten += (x[i] - '0') * pow(2, x.length() - i - 1); } string res = ""; if (ten == 0) { return "0"; } while (ten) { res = to_string(ten % 3) + res; ten /= 3; } return res;}int main(){ int n; cin >> n; cin.ignore(); vector<string> nums1; string num1; for (int i = 1; i <= n; i++) { getline(cin, num1); nums1.push_back(num1); } for (int i = 0; i < nums1.size(); i++) { cout << to23(nums1[i]) << endl; } return 0;}
现在,您的代码应该能够正确将2进制数转换为3进制数了。如果还有问题,请随时提问。
球一个最佳答案谢谢啦!这对我非常重要! |