UOJ Logo stu2020_2的博客

博客

求助

2022-08-01 20:45:07 By stu2020_2

题目描述

输入一个不超过100,000位的16进制数,请转换成8进制数。

注:16进制数中,字母0-9还对应表示数字0-9,字母"A"(大写)表示10,"B"表示11,..."F"表示15. 比如:16进制数A10B表示的10进制数是:10*16^3 + 116^2 + 016^1 + 1116^0 = 41227. 转换成的8进制数是: 120413 :因为 18^5 + 28^4 + 08^3 + 48^2 + 18^1 + 38^0 = 41227.

提示:考虑它们与2进制表示的关系。

输入格式

一行,一个16进制数。没有前导0(除非是数字0)

输出格式

一个8进制数。没有前导0(除非是数字0)

样例数据

input

123ABC

output

4435274

数据规模与约定

时间限制:1s

空间限制:256MB

评论

huimjue
```cpp #include <string> #include <iostream> #include <iomanip> int main() { std::string a; std::cin >> a; auto n = a.length(); a = std::string(n * 2 % 3, '0') + a; n = a.length(); std::cout << std::oct; for (auto i = 0llu; i < n; i += 3) { std::cout << std::stoi(a.substr(i, 3), nullptr, 16); if (i == 0llu) std::cout << std::setw(4) << std::setfill('0'); } std::cout << std::endl; return 0; } ```

发表评论

可以用@mike来提到mike这个用户,mike会被高亮显示。如果你真的想打“@”这个字符,请用“@@”。