文章

81

粉丝

2

获赞

544

访问

20.4k

头像
十进制和二进制 题解:
P1176 清华大学上机题
发布于2026年3月15日 13:10
阅读数 607

#include <iostream>
#include <string>
using namespace std;

int main() {
    string n;

    while (cin >> n) {
        string ans = "0";

        while (n != "0") {
            int r = 0;

            for (int i = 0; i < n.size(); i++) {
                int cur = r * 10 + n[i] - '0';
                n[i] = cur / 2 + '0';
                r = cur % 2;
            }

            while (n.size() > 1 && n[0] == '0')
                n.erase(0,1);

            int carry = r;
            for (int i = ans.size()-1; i >= 0; i--) {
                int x = (ans[i]-'0')*2 + carry;
                ans[i] = x%10 + '0';
                carry = x/10;
            }
            if (carry) ans = char(carry+'0') + ans;
        }

        cout << ans << endl;
    }
}

程序核心部分是一个循环,对大整数 n 不断做除以 2 的操作,同时构造结果 ans。首先,通过从最高位到最低位遍历字符串 n,用 cur = r*10 + 当前位 模拟竖式除法,计算当前位的商 cur/2 并写回字符串,同时将余数 cur%2 存到 r 里,余数会传递给下一位,整轮结束后 r 就是 n 本轮除以...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发