题解 | #八进制# 模板无敌了
八进制
https://www.nowcoder.com/practice/eda051c1effc4dffa630bc8507f0c5f7
#include <bits/stdc++.h>
using namespace std;
string convert(string s, int m, int b) {
string ans;
while (!s.empty()) {
int k = 0; // 余数
bool leadingZero = true; // 用于去除前导零
string temp;
for (int i = 0; i < s.size(); i++) {
// 如果是字母字符(用于大于10的进制),则转换为对应的值,如'A' -> 10, 'B' -> 11
int digit = (isdigit(s[i]) ? s[i] - '0' : s[i] - 'A' + 10);
int t = (k * m + digit) % b;
int quotient = (k * m + digit) / b;
k = t;
if (quotient != 0 || !leadingZero) {
temp += (quotient < 10 ? quotient + '0' : quotient - 10 + 'A');
leadingZero = false;
}
}
ans += (k < 10 ? k + '0' : k - 10 + 'A');
s = temp;
}
reverse(ans.begin(), ans.end());
return ans.empty() ? "0" : ans;
}
int main(){
string s;
while(cin >> s){
string answer = convert(s,10,8);
cout << answer << endl;
}
return 0;
}
查看17道真题和解析