记得刚刚知道高精度之后,学长要求我们计算9的20万次方。
当时很傻的直接做,于是超时··
然后想到用81的次方,依旧……
于是6561,终于过了。
不过由于9的20万次方过大,所以不能用char型数组一位一位的存,而是选择了用int型数组以9999为上界进位。
代码如下:
#include<stdio.h>
int a[1000010],k=50000;
int main() {
int i,j,len,carry;
for(i=1; i<100010; i++)
a[i]=0;
a[0]=1;
len=1;
for(i=0; i<k; i++) {
carry=0;
for(j=0; j<len; j++) {
a[j]=a[j]*6561+carry;
if(a[j]>9999) {
carry=a[j]/10000;
a[j]=a[j]%10000;
}else{
carry=0;
}
}
if(carry!=0)
a[len++]=carry;
}
printf("%d",a[len-1]);
for(len-=2; len>=0; len--)
printf("%04d",a[len]);
return 0;
}