【解题报告】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; }

浙公网安备 33010602011771号