P8115 题解
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("}");
}