玩具程式 bigInt

2022-03-02 07:22:48 字數 2941 閱讀 8828

#0 為什麼稱作玩具程式?

1、實現簡單,也就是效率一般。

2、只具備無符號數的加、乘運算功能。

#1 如何實現

以1792為例,用陣列0號元素儲存2,1號元素儲存9,依此類推...

下面是大整數的儲存結構圖。

儲存結構定義:

1#define maxdigits 64

23 typedef struct  bignum;

加法實現:按位相加,再加上進製carry。兩個數長度未必相同,所以高位的處理需要特別對待。

乘法實現:乘法其實是用加法來實現的,下面列出了偽碼實現。

1int multiplybignum(bignum * src, bignum * dst)

1011     copybignum(&result, src);

1213

return

0;14 }

#2 除了初始化bigint外沒有

除法、求餘 運算:我構造了查詢表,但這也使得程式**變得更長了。

查詢表的構造過程:寫幾行輸出**,控制台輸入輸出重定向,拷貝粘帖。如果是手工的話,很可能會出錯。

1     unsigned char cachemgr[96][2]=;

#3 階乘運算31!,改下引數運算256!也行的, 執行時間也會長些

1int main()

1213     getchar();

14return

0;15 }

#4 更多參考

顯然,高精度數值運算程式庫的編寫可以稱得上相當professional的工作!如果你想動手,最好找些幫手。有遞迴實現。有四則運算的完整實現。有齊全的綜述。沒看過,但顯然裡面會有權威的描述,必然會有的,哈哈。

eric s. roberts. programming abstractions in c: a second course in computer science. addison-wesley educational publishers inc.

steven s. skiena miguel a. revilla. programming challenges. springer verlag. ch5.2 high-precision integers.

steven s. skiena. the algorithm design manual, second edition. springer-verlag. ch13.9 arbitrary-precision arithmetic.

d. knuth. the art of computer programming, volume 2: seminumerical algorithms. addison-wesley, reading ma, third edition, 1997.

#5 **參考,拍磚請輕點下手

1 #include 

2 #include "

bigint.h"3

#define maxdigits 64

45 typedef struct  bignum;910

int makebignum(int src, bignum * bn)

1718

return

0;19 }

2021

int printfbignum(bignum * bn)

2627     printf("

\n");

2829

return

0;30 }

3132

int addbignum(bignum * src, bignum * dst);

3940     bignum * longnum = src;

41int shortlength = dst->lastdigit;

42if(dst->lastdigit > src->lastdigit)

46int length = longnum->lastdigit;

4748

int carry = 0;

49for (int i=0; i<=shortlength; i++)

5455

for (int i=shortlength+1; i<=length; i++)

6061

if (carry == 1)

65else src->lastdigit = longnum->lastdigit;

6667

return

0;68 }

6970

//src *****> dst

71int copybignum(bignum * src, bignum * dst)

8182

int multiplydigit(bignum * src, unsigned char digit, bignum * t);

105106

int carry = 0;

107int length = src->lastdigit;

108int x;

109110

for(int i=0; i<=length; i++)

116117

if (carry > 0)

121122

return

0;123 }

124125

int multiplybignum(bignum * src, bignum * dst)

139140     copybignum(&result, src);

141142

return

0;143 }

144145

int main()

156157     getchar();

158return

0;159 }

bigint 10 和bigint 20 的區別

1 bigint 10 和bigint 20 的區別在於如果表定義加上zerofill後再客戶端顯示長度不同,如下 mariadb test create table test2 id bigint 10 zerofill,id1 bigint 20 zerofill mariadb test in...

bigInt資料型別

簡述 bigint資料型別提供了一種方法來表示大於2 53 1的整數。bigint可以表示任意大的整數 作用解決精度缺失的問題 bigint資料型別比number型別支援更大的整數值,number型別只能安全的支援 9007199254740991 2 53 1 和 9007199254740991...

bigInt與varchar索引的大小

今天晚上突然想到乙個問題 對於單個欄位的索引,用bigint和varchar做索引,bigint索引到底能減少多大?於是我建了兩張表 create table test long id bigint 20 not null,key in id engine innodb default charse...