本文主要是介绍hdu1163(求n的n次方的位根),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
以前一直超时,看了之后原来可以用数学推出来!!!!!!
以下为摘数学算法:
因为ab*ab=(10*a+b)*(10*a+b)=100*a*a+10*2*a*b+b*b=a*a+2*a*b+b*b=(a+b)*(a+b)
abc*abc=(100*a+10*b+c)*(100*a+10*b+c)
=10000*a*a+2000*a*b+100*b*b+200*a*c+20*b*c+c*c
=a*a+2*a*b+b*b+2*a*c+2*b*c+c*c
=(a+b)^2+2*c*(a+b)+c*c
= (a+b+c)*(a+b+c)
同理可以知道四位数,五位数也一样,
即n*n的数根=n的数根*n的数根
#include<stdio.h>
#include<string.h>
int main()
{
int f,n,i,sum,t;
while(scanf("%d",&n)==1&&n!=0)
{
sum=n;
while(sum>=10)
{
t=0;
while(sum)
{
t+=sum%10;
sum/=10;
}
sum=t;
}
f=sum;
for(i=2;i<=n;i++)
{
sum*=f;
while(sum>=10)
{
t=0;
while(sum)
{
t+=sum%10;
sum/=10;
}
sum=t;
}
}
f=sum;
printf("%d\n",f);
}
return 0;
}
这篇关于hdu1163(求n的n次方的位根)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!