✔ 最佳答案
(一_一 |||)還是寫程式丟給電腦來計算好了。
用 Log 算也算不出來……
2007-07-11 16:47:41 補充:
2 的 50 次方等於…
「327339060789614187013189696827599152216642460430647894832913680961337964046745548832792325941571508866841275607109217256545885393053328527589376」
(我不知道上述值是否完全正確…)
以下是程式原始碼
//Power by Visual Studio 2005
#include<stdio.h>
#include<stdlib.h>
#define BIT 151
#define LEN (BIT/4 1)
void multiply(int *a, int b, int *c, int N) { // b 為乘數
int i,tmp,carry=0;
for(i=N-1;i>=0;i--){
tmp=a[i]*b carry;
c[i]=tmp000;
carry=tmp/10000;
}
}
int main(int argc, char* argv[]){
//==========START==========//
FILE *f;
char *fn="output.txt";
int number[LEN]={0},result[LEN],i,j,e=500;
number[LEN-1]=1;
for(i=0;i<e;i ){
multiply(number,2,result,LEN);
for(j=0;j<LEN;j ){
number[j]=result[j];
}
}
printf("2^%d= ",e);
for(j=0;j<LEN;j ){
printf("%d",result[j]);
}
f=fopen(fn,"w");
if(f!=NULL){
for(j=0;j<LEN;j ){
fprintf(f,"%d",number[j]);
}
fclose(f);
}
//==========END==========//
printf("\n"),system("PAUSE");
return 0;
}
2007-07-11 16:53:47 補充:
真糟糕,經修改後上面程式「加號」全消失了。
2007-07-11 17:20:48 補充:
字打錯了,少打一個零,是 500 五百次方!
2007-07-11 17:45:06 補充:
上述的乘法演算法雖然完全取自參考資料網址,但是原作者寫的這個演算法是有問題的,因為它無法解決例如 10999 % 10000 等於 0999 的問題,也就是說上面計算的每一位數字是正確的,但是每個數之間可能會少一個零,所以整體來說,上面整個計算的值是錯誤的。
2007-07-11 17:45:11 補充:
所以我再次改寫程式,並計算過一遍,答案為:
「327 3390 6078 9614 1870 0131 8969 6827 5991 5221 6642 0460 4306 4789 4832 9136 8096 1337 9640 4674 5548 8327 0092 3259 0415 7150 8866 8412 7560 0710 0921 7256 5458 8539 3053 3285 2758 9376 」
修正後的位數總共 151 位,中間每四位數用空格分開。
2007-07-11 17:47:47 補充:
原先計算的答案是錯誤的,因為演算法的關係出現錯誤。
正確的答案在最下方的「補充內容」內,而錯誤的說明在包含在「補充內容」裡。
2007-07-11 18:03:48 補充:
原先第一次計算的答案,也就是有打黃色背景的數值是「不對」的;只有最下方「補充內容」的答案才是「正確」的。