文章
28
粉丝
0
获赞
124
访问
3.2k
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;
int main(){
string str;
while(cin>>str){
vector<int> arr;//二进制
//得到逆序后的二进制
while (str != "0") {
int carry = 0;
string next;
for (char c : str) {
int digit = c - '0'; // 当前这一位的十进制数字(0~9)
int num = carry * 10 + digit; // 想象手写除法,从高位开始,余出来的位添在下一个数前
next += (num / 2) + '0'; // 当前位除以 2 的商,是这一位除完后的结果,变成字符拼到整个商里
carry = num % 2; // 当前位除以 2 的余数,留给下一位继续用
}
arr.push_back(carry); // 余数就是二进制最低位,在后面push相当于逆序了
// 去掉前导零
size_t start = 0;
while (start < next.size() && next[start] == '0') start++;
if (start == next.size()) str = "0";//输入就是0的情况
else str = next.substr(start);
}
//十进制的二进制逆序数再转十进制
vector<int> decimal(1,0);//初始1位,即0
//arr是放的二进制位,decimal放十进制位
f...
登录后发布评论
暂无评论,来抢沙发