【解题报告】Sum of divisors

原题地址:http://acm.hdu.edu.cn/showproblem.php?pid=4432

==============================

题目大意:把输入的数n的约数转换成m进制,并转换后的数每位的平方相加,用m进制输出。

解题思路:用穷举法穷举出n的约数,不过必须得用a=(int)sqrt(n*1.0);,不然会超时,至于用上了(int)和让(n*1.0)我也不是很懂这个,好像是sqrt的原型是double型的。不是很懂,有懂的望指点。然后进制转换。输出。

==============================

#include<iostream>
#include<string.h>
#include<stdio.h>
#include<math.h>
using namespace std;
int l,num[1000];
void cha(int n,int m)
{
    l=0;
    while(n!=0){
        num[l++]=n%m;
        n/=m;
    }
}
int main()
{
    int n,m,i,j,a,b,c,sum=0;
    while(scanf("%d%d",&n,&m)!=EOF)
    {
        a=(int)sqrt(n*1.0);
        sum=0;
        for(i=1;i<=a;i++){
            if(n%i!=0) continue;
            b=i;
            while(b!=0){
                c=b%m;
                sum+=c*c;
                b/=m;
            }

            b=n/i;
            if(i==b) continue;
            while(b!=0){
                c=b%m;
                sum+=c*c;
                b/=m;
            }
        }
        if(sum==0){
            printf("0");
            continue;
        }
        cha(sum,m);
        for(i=l-1;i>=0;i--){
            if(num[i]>9)
                printf("%c",num[i]-10+'A');
            else 
                printf("%d",num[i]);
        }
        printf("\n");
    }
    return 0;
}

 

 

posted @ 2014-04-03 20:51  一粒沙.  阅读(30)  评论(0)    收藏  举报