文章

28

粉丝

0

获赞

124

访问

3.2k

头像
十进制和二进制 题解:居然写了一下午
P1176 清华大学上机题
发布于2026年2月12日 16:16
阅读数 291

#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...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发