您的位置:首页 > 其它

HDU 4432 Sum of divisors 2012 Asia Tianjin Regional Contest

2013-05-21 20:54 225 查看
解题报告:

题目大意:输入两个数n和m,要求按一下步骤做,首先将n转化成m进制的数,然后求这个数的每一位的平方和。最后转化成m进制再显示出来。

模拟题,要注意的一点是这个m的范围是2到16,所以当m超过10时要记得转化为对应的字母表示。

#include<cstdio>
#include<cmath>
typedef __int64 ll;
ll n,m;
char an[17]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
ll add(ll N,ll M) {
ll sum=0;
while(N) {
ll d=N%M;
sum+=d*d;
N/=M;
}
return sum;
}
void print(ll N,ll M) {
char a[10005];
int i=1;
while(N) {
a[i++]=an[N%M];
N/=M;
}
for(int j=i-1;j>=1;--j)
printf("%c",a[j]);
printf("\n");
}

int main( ) {
while(scanf("%I64d%I64d",&n,&m)!=EOF) {
ll sum=0;
for(ll i=1;i<=sqrt(n);++i)
if(n%i==0) {
sum+=add(i,m);
if(i*i!=n)
sum+=add(n/i,m);
}
print(sum,m);
}
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: