欢乐赛#35 T6题解
2024-12-10 21:56:34
发布于:广东
38阅读
0回复
0点赞
这一题考察的是10,8,16进制之间的转换了,可以将转换的过程封装为函数来做。
10 -> 8可以用对8取余,然后整除8,最后将对8取余的结果倒序排列就好,这里可以用到栈和while循环来实现,该函数代码如下
int tentoeight(int n) {
stack <int> s;
while (n) {
s.push(n % 8);
n /= 8;
}
string str = "";
while (! s.empty()) {
str += to_string(s.top()); // 将每一个栈顶元素转换为string形式加入到str的末尾
s.pop();
}
return stoi(str); // 将str转换为int类型返回
}
16 -> 10可以用每一个数字乘上它所对应的权值来转换,各各数位的权值从后向前为 16^0, 16^1, 16^2……该函数代码如下
int sixteentoten(int n) {
string s = to_string(n);
int ans = 0, p = 0; // p 为当前数位的权重的指数(权重为16^p)
for (int i = s.size() - 1; i >= 0; i --) {
ans += (s[i] - '0') * pow(16, p);
p ++;
}
return ans;
}
所以,本题的整体代码就为
#include <bits/stdc++.h>
using namespace std;
int tentoeight(int n) {
stack <int> s;
while (n) {
s.push(n % 8);
n /= 8;
}
string str = "";
while (! s.empty()) {
str += to_string(s.top()); // 将每一个栈顶元素转换为string形式加入到str的末尾
s.pop();
}
return stoi(str); // 将str转换为int类型返回
}
int sixteentoten(int n) {
string s = to_string(n);
int ans = 0, p = 0; // p 为当前数位的权重的指数(权重为16^p)
for (int i = s.size() - 1; i >= 0; i --) {
ans += (s[i] - '0') * pow(16, p);
p ++;
}
return ans;
}
int main() {
int n;
cin >> n;
cout << sixteentoten(tentoeight(n)) << '\n';
return 0;
}
全部评论 1
仁济 浮点数精度不够就老实了
1周前 来自 广东
0
有帮助,赞一个