HDU 1163 Eddy's digital Roots

刚开始试着用n*log(n)的方法去解,但细想一下这个方法是不行的,因为精度丢失好大,后来试着推里面的规律,这个规律就是n^n变成n^(n-1)再乘以n的所有位数之和,n^( n-2 )*((n的前所有位数之和)*n的前所有位数之和),以此类推。

#include<stdio.h>
#include
<stdlib.h>
#include
<math.h>
inline
int SUM( int n )
{
int sum=0,z=1;
while( n/z )
{
sum
+=n%(z*10)/z;
z
*=10;
}
return sum;
}
int main()
{
int n;
while( scanf( "%d",&n ),n )
{
int sum=n;
for( int i=1;i<n; i++ )
{
sum
*=n;
while( sum>9 )
{
sum
=SUM( sum );
}
}
printf(
"%d\n",sum );
}
return 0;
}

  

posted @ 2011-08-21 21:54  wutaoKeen  阅读(156)  评论(0编辑  收藏  举报