小项目:大数的基本运算

0

版权声称:定冠词是视频博客作者的怪人文字。,没有博主答应,不得反复无常地转载。。

188bet备用网址        

                        

研制产生轻松氛围的Visual Studio 2015

次要技术string,C 类

特性描述

1。处置计算者无法计算的大datum的复数。,容许计算者读取大datum的复数、出口与根本运算;

2.运用C 类将超越内置典型(long long Int)将仔细研究的数替换为字母串用于蓄电。,有雅量的的字母串被取代和辨析。,逐位算术蓄电,大数使解体成奇特的事物性格的计算;

三。有雅量的标明。,大数的出口与增强的人或事物,减,乘,更计算功用外。

188bet备用网址的使掉转船头方式次要有以下几种:

(1) 讲话母串表现大数。有雅量的的数字用十进法性格装饰表现。,到这程度尾随计算了铅直计算的思惟。。这种方式更轻易了解。,但计算生产率很低。。

(2)将大数处理二元系流。。使用杂多的位运算和布尔运算使掉转船头OPER。该方式设计复杂。,易读差,而且很难调试。。

(3)把大数表现成一编号。n进制装饰。n价钱越大。,装饰越小。,这可以延长计算时期和住宿复合物。,放针算法生产率。在32位体系,n可以取2^32,此刻,人人的价钱仔细研究是0~0xffffffff

    思索左右方式。3)来使掉转船头,n=2^32时,大数字切中要害人人都是对的。unsigned
long
的仔细研究,思索增强的人或事物乘法切中要害溢出物景象,可以选择long long型,而且几乎全部大数字,牵制变量表现其迹象,表现其胶料的变量。,原始的装饰来蓄电每个位的值。。到这程度,可以运用以下构造来表现有雅量的数字。:

typedef struct 大数
{
    bool tag;                          // 大数迹象 true:比所示数量多的 ,false :正数
    int length;                         // 记载有雅量的的胶料。
    long long bigInt[SIZE];              // 记载有雅量的人的价钱。
 
    大数( const bool& t=true,const int& len=0)
    {
        tag = t;
        length = len;
 
        for( int i=0; i

一、大数增强的人或事物

  前提增强的人或事物切中要害两个操算数大于0的。依照铅直计算的思惟,率先,两个操算数指示低。,到这程度从最低位开端并添加位。,当位增强的人或事物的成功实现的事大于2^32-1停止处置carry=1),若非,不停止进位。carry=0)。


迹象演示:op1=ABCD, op2=EFG

    A  B  C  D

    +  E  F  G

-------------------

H  I  J  K   L

   设定初值carry=0,在内侧地若D+G+carry>0xffffffffL=D+G+carry-0xffffffff-1,
carry=1;
L=D+G+carrycarry=0扣紧述方式计算K,J,I,H。

比如:0x1  0x1  0x1  + 0xffffffff 0xffffffff; 初始carry=0

运算手续:

(1)0x1+0xffffffff+0>0xffffffff, 到这程度计算成功实现的事的最低位〔0〕=0x0。,carry=1;

(2)0x1+0xffffffff+1>0xffffffff,因而[ 1 ] 0x1+0xffffffff+1-0xffffffff-1=1,carry=1;

(3)0x1+1<0xffffffff,因而[2]=2;

经受住的成功实现的事是2。  1  0

二、大数减法

  为了预先消化计算,前提减法数常常没有约化。,这么样计算的终极成功实现的事常常大于等同0。根本思惟与增强大数根本同上。,你能够必要借减法。,界限和初始借变量borrow=0。显然,borrow或等同0,或等同1

 

比如:0x1 0x1 0x1 – 0xffffffff  0xffffffff;初始borrow=0

计算手续:

(1) 0x1<0xfffffff+borrow,到这程度朕必要借钱。,[0]= 0xffffffff-(0xffffffff+0-0x1)+1=2,borrow=1;

(2)0x1<0xffffffff+borrow,到这程度[1]= 0xffffffff-(0xffffffff+1-0x1)+1=1,borrow=1;

(3)0x1=0+borrow,到这程度[2]=0, borrow=0;

经受住的成功实现的事是:1  2

三、大数乘法

  前提乘法的两个操算数是正的。。依照铅直计算思惟,大数的乘法可以经过增强大NU来附带。,乘以乘法器乘以乘法器。,到这程度添加每个计算的成功实现的事。。在每个乘法手续中依然在进位景象。,这不仅仅是一种继续。1,此外更大的数字。。

 

手续演示:

        A   B

  *    C   D

---------------

       E  F G

+ H  I  J

----------------------------

K M N  O P

      在内侧地,B*D+carry>0xffffffff,因而章G=(B*D+carry)%0xffffffffcarry=(B*D+carry)/0xffffffff;

若非,G=B*D+carry,carry=0;按照上述的计算规律计算,F E J I H.并按照大数增强的人或事物的方式停止计算。P
O N M K

比如: 0x1  0x1  0x1 * 0xffffffff  0xffffffff。

计算手续:

10x1 0x1 0x1 * 0xffffffff =0xffffffff 0xffffffff 0xffffffff

20x1 0x1 0x1 * 0xffffffff =0xffffffff 0xffffffff 0xffffffff,因这是乘法器的第原始的席位。,成功实现的事是延伸一。,行进0xffffffff
0xffffffff 0xffffffff 0x0

3)计算0xffffffff 0xffffffff 0xffffffff + 0xffffffff 0xffffffff 0xffffffff 0x0

4)成功实现的事为1 0 0xffffffff 0xfffffffe 0xffffffff

四、大数除法


  除法是由于乘法运算。,圆搜索num使得num*op1==op2,生产率较低。

 

全信号交链:

运转成功实现的事:

 

LEAVE A REPLY