文章
81
粉丝
2
获赞
544
访问
20.4k
#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 本轮除以...
登录后发布评论
暂无评论,来抢沙发