使用C语言实现计算114514的114514次方的值
-
输出结果:0_1535118587489_114514^114514.txt
代码如下:#include <stdio.h> #include <stdlib.h> int main() { int a[144828],i,j; //lg114514*114514=579310.13,因此所求数有579,311位,定义含144828个元素的数组作为得数存储区,每个元素存储4位数字,编号越小的元素代表越低数位。 FILE *fp; fp=fopen("D:\\114514^114514.txt","a"); /************将数组所有元素归零*************/ for(i=0;i<=144827;i++) { a[i]=0; } /**输入乘数114514,随后再乘以114513次114514**/ a[0]=4514; a[1]=11; /****************运算过程*******************/ for(i=1;i<=114513;i++) { for(j=0;j<=144827;j++) //第1部分:将数组内各元素存储的数字乘以114514 { a[j]*=114514; } for(j=0;j<=144827;j++) //第2部分:重新将各元素内存储的数字化为4位,类似于进位 { a[j+1]+=(a[j]-a[j]%10000)/10000; a[j]%=10000; } } /****************输出结果*******************/ for(i=144827;i>=0;i--) //从高位到低位输出 { fputc((a[i]-a[i]%1000)/1000+0x30,fp);//最高位 fputc((a[i]%1000-(a[i]%1000)%100)/100+0x30,fp);//次高位 fputc((a[i]%100-(a[i]%100)%10)/10+0x30,fp);//次低位 fputc((a[i]%10+0x30),fp);//最低位 } return 0; }
-
代码有一点问题导致第一位输出是0……去掉最前面的0就是得数了
-
大型数进位suki
-
算法兄贵过触,,,
-
CUDA 请
-
高精度suki
-
码农都是homo(暴论)
-
快速幂取模,请
-
青叶喜欢
另外,那个,单个元素数位有上限吗,取4位是随便选的、上限决定的还是为了提升运算速度呢?(无知)