别人的代码开始自己不知道什么数论解法:
ab*ab=(a*10+b)(a*10+b)=a^2*100+2ab*10+b^2 所以the root digital=(a+b)*(a+b); 而数论中的定理:两数之积对9取余数等于两数对9的余数的乘积。 代码: #include"stdio.h" int main() { int i,n,sum; while(scanf("%d",&n)!=EOF&&n!=0) { sum=1; for(i=0;i<n;i++) { sum=sum*n%9; } if(sum==0) printf("9 "); else printf("%d ",sum); } return 0; }
我的ac代码:
#include<stdio.h> __int64 seach(__int64 u) { __int64 sum=0; while(u) { sum=sum+u%10; u/=10; } if(sum<10) return sum; return seach(sum); } __int64 dfs(__int64 n,__int64 index) { if(index==1) return n; if(index==0) return 1; if(index%2==1) return n*dfs(seach(n*n),index/2); return dfs(seach(n*n),index/2); } int main() { __int64 n,m,i,j,k; while(scanf("%I64d",&n),n) { printf("%I64d ",seach(dfs(seach(n),n))); } return 0; }