1 条题解
-
0
自动搬运
来自洛谷,原作者为

wimg6_
1+1=?搬运于
2025-08-24 22:36:09,当前版本为作者最后更新于2022-02-07 16:00:13,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
P8115 题解
题目指标 Table.
该文章同步发表于 我的博客 内。
审核一经通过,他人不得盗用博客。若未通过,引用时需注明出处,并私信作者。
正解
读题。题意挺明确的,要你将十进制转换成十六进制。如果十六进制比十进制位数少两个及以上,则使用十六进制,否则使用十进制。
进制转换非常容易,也就小学奥数的难度。如下所示:
例:需使 ,求 的值。
可以使用短除法:
首先 ,记录 。
再 ,记录 。
接着 ,记录 。
以此类推,直到 为止,有 。
有 。
即可完成转化。
代码
这道题代码难点即在实现短除法以及进行比对。请读者依照以上分析与下列代码自行理解。
同时需要注意,这道题的 long long 很大几率会炸掉,所以我一开始就选了 unsigned long long,但是完全没有必要使用高精度。
以下是代码:
#include<iostream> #include<algorithm> #include<cstdio> using namespace std; unsigned long long n,f,p,q[1005]; string s; char r; int main() { cin>>r; while(cin>>q[++n]) cin>>r; printf("{"); for(int i=1;i<n;i++) { s="",f=q[i],p=0; while(f) p++,f/=10; f=q[i]; while(q[i]) { if(q[i]%16>9) s=char(q[i]%16-10+'A')+s; else s=char(q[i]%16+'0')+s; q[i]/=16; } s="0x"+s; if(s.size()<=p) cout<<s; else cout<<f; if(i<n-1) cout<<","; } return !printf("}"); }
- 1
信息
- ID
- 7399
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 2
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者