我的乘法分析

来源:互联网 发布:淘宝怎么修改折扣价 编辑:程序博客网 时间:2024/06/06 04:29
<span style="font-family: punctuation, 微软雅黑, Tohoma; font-size: 14px; line-height: 22px; background-color: rgb(36, 99, 157);"> </span><pre name="code" class="cpp"> 整型大数值存储:        最大整型 8Byte、64位的long型存储整数最大一般不超过20位,如果计算数据位数多于20,数就会溢出,得到错误的数。如何存储很多位数甚至是无穷位数的整数?用数组存储大数,即数组中每个单元存储0,1,2,3,4,5,6,7,8,9其中的某个数,数组单元中的数排成一定的次序,也可以表示一个数。                               long a=9_223_372_036_854_775_807(19位)=9.223...x10^18;                               var   b[1000]={9,2,2,3,0};  组成的数值大小可以是:9.223 x 10^999;远远大于a的值。                                数组可以是无限个单元的集合。用指针表示数组,                                如int * p={……},数组索引方式读取数据 p[0]=?,p[1]=?,p[2]=?,p[3]=?, ……那数值大小可以为:????……一直可无限读取。但存储空间是有限的,所以并不是无限个单元,况且单元也占用空间。总之数组可以实现:表示很大的整型数值。       大数值运算:        如何实现数组所表示的大数值的乘法运算运算 ?           乘法运算规律1:                                  12345x345 = 4259025                                                      1        2        3        4        5                                 ----------------5位                                                 x                        3        4        5                                 ----------------3位    ———————————————————————————————                    +                                5        10       15      20      25                    +                       4        8       12        16      20                                                                   +                 3     6       9        12       15                                                                                                                                       1        2        3       5         4         2                                  --------------- 进位——————————————————————————————————                                       4       2        5        9       0        2        5                               ----------------7位<3+5=8;             乘法运算规律2:                                   两数相乘的积的位数小于等于此两数位数之和。例子如上。             乘法运算规律3:                                   两个数字之间的乘积最大为两位数。                                                                                      如:1x2 =2        ------------1位                                                    9x9=81      ------------ 2位             实现数组表示的大数值运算:                        设 整数 N 无穷大                       设两个大整型数值:123456789  ,  987654321                       存储在数组中,int a[N]={1.2.3.4.5.6.7.8.9}   ,    b[N]={9,8,7,6,5,4,3,2,1} ;                                                int c[2N]={0};                                                                                                //计算每个算术位上的值之和                                                for(int i=0;i<N;i++}                                                       for(int j=0;j<N;j++)                                                                c[i+j] + = a[i] * b[j];                                                                                                  //处理结果集,得到正确的数                                              for(int i=0; i<2*N;i++)                                              {                                                          c[i+1] + = c[i] / 10 ;     //进位                                                          c[i]  =   c[i] % 10   ;      //余位                                                }                                                                                依次读取数组 c 每个单元的数,排成的数即为两大数乘积。 存在问题:浪费内存,如果动态的分配,可以实现控制内存和设置运算结果范围。

                                             
0 0
原创粉丝点击