HDU 4432 Sum of divisors 2012 Asia Tianjin Regional Contest

解题报告:

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

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

 1 #include<cstdio>
 2 #include<cmath>
 3 typedef __int64 ll;
 4 ll n,m;
 5 char an[17]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
 6 ll add(ll N,ll M) {
 7     ll sum=0;
 8     while(N) {
 9         ll d=N%M;
10         sum+=d*d;
11         N/=M;
12     }
13     return sum;
14 }
15 void print(ll N,ll M) {
16     char a[10005];
17     int i=1;
18     while(N) {
19         a[i++]=an[N%M];
20         N/=M;
21     }
22     for(int j=i-1;j>=1;--j)
23     printf("%c",a[j]);
24     printf("\n");
25 }
26 
27 int main( ) {
28     while(scanf("%I64d%I64d",&n,&m)!=EOF) {
29         ll sum=0;
30         for(ll i=1;i<=sqrt(n);++i)
31         if(n%i==0) {
32             sum+=add(i,m);
33             if(i*i!=n)
34             sum+=add(n/i,m);
35         }
36         print(sum,m);
37     }
38     return 0;
39 }
View Code
原文地址:https://www.cnblogs.com/xiaxiaosheng/p/3091507.html