zoukankan      html  css  js  c++  java
  • 13的100次方的计算

    今天看到了这个题,开始的时候不知道怎么,然后就查了各种资料,加之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,就是下一个迭代的高三位。依次循环继续执行。

  • 相关阅读:
    李超线段树 (Li-Chao Segment Tree)
    NowCoder Contest 894
    AtCoder Beginning Contest 126
    华工软院IBM LinuxONE Community Cloud云计算实验文档
    Codeforces Round #561 (div. 2)
    Comet OJ Contest #3
    Codeforces Edu Round 65 (Rated for Div. 2)
    莫队算法 (Mo's Algorithm)
    Codeforces Round #559 (Div. 2)
    GDCPC2019 广东省赛总结
  • 原文地址:https://www.cnblogs.com/future-liu1121/p/6119892.html
Copyright © 2011-2022 走看看