快速冪模板:
求a^b:
int ans=1;
while(b!=0)
printf("%d\n",ans);
高精度乘高精度模板:
void cheng(int a,int b);
c[0]=a[0]+b[0];
for(int i=0;i10)}}
while(c[k]==0)c[0]--;
}
**如下:
#include#include#includeusing namespace std;
int ans[1000000],a[1000000];
void cheng(int x,int y);
c[0]=x[0]+y[0];
if(c[0]>500)c[0]=500;
for(int i=0;i10)}}
for(int i=0;i<=c[0];i++)x[i]=c[i];
}void print()
printf("\n");
}printf("\n");
}int main()
ans[1]--;
print();
}
本題的收穫和遇到的陷阱:
1.求2^p的位數:
2.在cheng()函式中,陣列ans,只用保留前500位就可以了不然會超時
3.在cheng()函式中開始設陣列c的大小為600,結果出現了「程式停止工作」
原因可能為:
a.野指標,你使用的指標指向未知區域顯然我犯得是c錯,雖然理論上陣列c只用前500位就行了,但是在x與y陣列相乘的時候位數會遠遠大於500,所以要開大點數b.scanf函式輸入整形、字元……的時候缺少了&
c.緩衝區溢位,也就是說你使用陣列時不經意間越界了
洛谷 P1045 麥森數(高精度 快速冪)
題目 標籤 高精度 快速冪 此題主要分為兩個部分,第乙個部分是求位數,第二部分是求最後500位數字。便於理解 下面 是普通的快速冪運算。對於本題的 muti1 相當於計算result a muti2 相當於計算a a 不同之處只是先用tmp臨時存起計算結果,再複製給相應的result和a。int q...
洛谷P1045 麥森數 快速冪 高精度乘法
題目大意 計算2p 12 p 1 2p 1 的位數和最後500位數字 用十進位制高精度數表示 題目分析 1 首先是計算位數 我們不難發現,2p 12 p 1 2p 1 和2 p2 p 2p在十進位制下的位數是相同的,因此,我們只需要計算2 p2 p 2p的位數,我們不妨設 1 0k 2 p10 k ...
洛谷P1045麥森數(高精度乘法)
這題分兩問 求位數,求後500位 求位數 公式log10 x 1,把冪移到前面即可 求後500位 其實如果讓求完整的數的話,那就麻煩了,數太多一定時間複雜度高 但現在是只求後500位啊!多的不用管只求這些就行啊,複雜度明顯降下來了!求再多次冪,快速冪二分不斷分 每次就500位這麼小的複雜度,所以一定...