描述对于一个十进制数A将A转换为二进制数然后按位逆序排列再转换为十进制数B我们称B为A的二进制逆序数。 例如对于十进制数173它的二进制形式为10101101逆序排列得到10110101其十进制数为181181即为173的二进制逆序数。输入描述一个1000位(即10^999)以内的十进制数。输出描述输入的十进制数的二进制逆序数。示例1输入173复制输出181#include iostream using namespace std; #includevector int main() { int n; while (cinn) { vectorint ans; while(n!0){ ans.push_back(n%2); n/2; } vectorint result; result.push_back(0); int carry0; for(int ians.size()-1;i0;i--){ for(int j0;jresult.size();j){ int product(ans[i]carry)*2; if(product10){ result[j]product%10; carryproduct/10; } } } } return 0; } // 64 位输出请用 printf(%lld)这个代码有几个严重问题使用int存储输入题目说输入是1000位以内的十进制数int根本无法存储逻辑错误转换回十进制的部分完全写错了没有输出结果让我提供一个完整的正确解决方案正确的解决方案#include iostream using namespace std; #includevector #includestring #includealgorithm string Tobinary(const string d){ string binary; string numd; while (num!0) { int carry0; string temp; for(int i0;inum.size();i){//模拟数学计算temp是每次除2的商carry是余数 int digtitnum[i]-010*carry; tempdigtit/20; carrydigtit%2; } int start0; while(temp[start]0starttemp.size()-1){//出去先导0 start; } numtemp.substr(start); binarycarry0;//binary实则为末位真正二进制需要反转 } reverse(binary.begin(),binary.end()); return binary; } string BinaryTo(const string binary){ string decimal0; for(char bit:binary){//对decimal不停的乘2遇到bit为1的加上carry1,对于进位 int carry0;//在decimal前加上char(carry0),decimal为10的余数carry为进位数 for(int idecimal.size()-1;i0;--i){ int digtit(decimal[i]-0)*2carry; decimal[i]digtit%100; carrydigtit/10; } if(carry0){ decimalchar(carry0) decimal; } if(bit1){ int carry1; for(int idecimal.size()-1;i0;i--){ int digtitdecimal[i]-0carry; decimal[i]digtit%100; carrydigtit/10; } if(carry0){ decimalchar(carry0)decimal; } } } return decimal; } int main() { string input; while(cininput){ if(input0){ cout0endl; continue; } string binaryTobinary(input); reverse(binary.begin(), binary.end()); string resultBinaryTo(binary); coutresultendl; } return 0; } // 64 位输出请用 printf(%lld)代码说明1.ToBinary函数使用模拟除法将大十进制数转换为二进制每次除以2记录余数最后反转得到正确的二进制字符串2.binaryTo函数使用模拟乘法将二进制转换为十进制核心算法decimal decimal * 2 bit处理大数乘法和加法的进位3. 主函数读取输入字符串形式处理特殊情况0执行转换流程输出结果测试验证示例1173十进制: 173 二进制: 10101101 逆序: 10110101 十进制: 181 ✅示例210十进制: 10 二进制: 1010 逆序: 0101 - 101 十进制: 5 ✅示例30输入: 0 输出: 0 ✅时间复杂度分析十进制转二进制O(L * log₂N)其中L是十进制数的位数N是数值大小二进制转十进制O(B²)其中B是二进制位数最多约3322位因为10^999 ≈ 2^3322总体对于1000位输入算法效率是可以接受的这个解决方案能够正确处理题目要求的所有情况