今天看到了這個題曙搬,開始的時候不知道怎么,然后就查了各種資料鸽嫂,加之gdb的調(diào)試之后總算是有些成效了∽葑埃現(xiàn)在把它記錄下來,整理一下据某。
題目就是標題橡娄,用一個數(shù)組存儲13的100次方的值,然后輸出來癣籽。
代碼如下:
說明一下:這個代碼是我拷的網(wǎng)上的代碼挽唉,這里只是把他解析一下而已;
1 #include<stdio.h>
2
3 int main()
4 {
5 int a[100]={1,0},b[100]={0};
6 b[-1]=0;
7 int i,t,cut=1;
8 for(i=1;i<101;i++)
9 {
10 for(t=0;t<cut;t++)
11 {
12 b[t]=a[t]=a[t]*13;
13 a[t]=a[t]%1000+b[t-1]/1000;
14 if(b[cut-1]!=0)
15 cut++;
16 }
17 }
18 printf("13的100次方是:");
19 for(i=cut-1;i>=0;i--)
20 {
21 printf("%d",a[i]);
22 }
23 printf("\n");
24 return 0;
25 }
如下是我進行gdb調(diào)試的結果筷狼。
從上面的過程可以看出來瓶籽,a,b數(shù)組在不斷的擴充;如下示出13的次方埂材,可以進行對比塑顺。
13^1=13;
13^2=169;
13^3=2,197;
13^4=28,561;
13^5=371,293;
13^6=4,826,809
......
可以看出來a數(shù)組中迭代的是13的次方的每隔3位數(shù)字,而且a[0]保存的是低三位俏险,依次提高严拒;b數(shù)組中存儲的是每次a數(shù)組的對應位的前一個數(shù)和13的乘積,并且b[t-1]/1000中的數(shù)就是超出三位數(shù)的數(shù)竖独,加到高位a[t]中裤唠,即:低三位向高位的進位,然后a的高位加上之后繼續(xù)可以求出a的高位莹痢。簡單的說就是种蘸,13的每次乘積每三位一分隔,然后迭代低三位13%1000格二,就是下一個迭代的低三位,然后低位的進位與高位的乘積相加的結果13竣蹦,就是下一個迭代的高三位顶猜。依次循環(huán)繼續(xù)執(zhí)行。