今天看到了这个题,开始的时候不知道怎么,然后就查了各种资料,加之gdb的调试之后总算是有些成效了。现在把它记录下来,整理一下。
题目就是标题,用一个数组存储13的100次方的值,然后输出来。
代码如下:
说明一下:这个代码是我拷的网上的代码,这里只是把他解析一下而已;
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("
");
24 return 0;
25 }
如下是我进行gdb调试的结果。
从上面的过程可以看出来,a,b数组在不断的扩充;如下示出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数组中迭代的是13的次方的每隔3位数字,而且a[0]保存的是低三位,依次提高;b数组中存储的是每次a数组的对应位的前一个数和13的乘积,并且b[t-1]/1000中的数就是超出三位数的数,加到高位a[t]中,即:低三位向高位的进位,然后a的高位加上之后继续可以求出a的高位。简单的说就是,13的每次乘积每三位一分隔,然后迭代低三位*13%1000,就是下一个迭代的低三位,然后低位的进位与高位的乘积相加的结果*13,就是下一个迭代的高三位。依次循环继续执行。