hdu 1163 Eddy's digital Roots
#include<stdio.h> int cal(int m) { while(m>9) { //int yu=m; int sum=0; for(int i=0;m;i++) { sum+=m%10; m/=10; } m=sum; } return m; } int main() { int n; while(scanf("%d",&n)!=EOF&&n!=0) { int mul=1; for(int i=0;i<n;i++) { mul*=n; if(mul>10)mul=cal(mul); } printf("%d\n",mul); } return 0; }
数学规律:
n^n=((n*n)’s digital root *n )’s digital root…………;
该进(加入的快速幂的方法)
#include<stdio.h> int cal(int m) { while(m>9) { //int yu=m; int sum=0; for(int i=0;m;i++) { sum+=m%10; m/=10; } m=sum; } return m; } int multy(int q,int n) { int cnt=n; int base=n; int ret=1; while(cnt>0) { if(cnt&1) ret=ret*base; cnt=cnt>>1; base=base*base; if(base>9)base=cal(base); if(ret>9)ret=cal(ret); } return ret; } int main() { int n; while(scanf("%d",&n)!=EOF&&n!=0) { int mul=multy(n,n); /*for(int i=0;i<n;i++) { mul*=n; if(mul>10)mul=cal(mul); }*/ printf("%d\n",mul); } return 0; }