超長(zhǎng)整數(shù)的存儲(chǔ)與運(yùn)算設(shè)計(jì)說明書.doc_第1頁(yè)
超長(zhǎng)整數(shù)的存儲(chǔ)與運(yùn)算設(shè)計(jì)說明書.doc_第2頁(yè)
超長(zhǎng)整數(shù)的存儲(chǔ)與運(yùn)算設(shè)計(jì)說明書.doc_第3頁(yè)
超長(zhǎng)整數(shù)的存儲(chǔ)與運(yùn)算設(shè)計(jì)說明書.doc_第4頁(yè)
超長(zhǎng)整數(shù)的存儲(chǔ)與運(yùn)算設(shè)計(jì)說明書.doc_第5頁(yè)
已閱讀5頁(yè),還剩18頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、計(jì)算機(jī)科學(xué)系課程設(shè)計(jì)任務(wù)書計(jì)算機(jī)科學(xué)系課程設(shè)計(jì)任務(wù)書摘 要 計(jì)算機(jī)計(jì)算結(jié)果的精度,通常要受到計(jì)算機(jī)硬件環(huán)境的限制。在 C 語(yǔ)言和 VB 中對(duì)于有符號(hào)的長(zhǎng)整型數(shù)據(jù)的范圍是-2147483648 到 2147483647 之間,用戶一般是無法改變的.但是,我們可以通過“軟”的方式來解決這一困難,即通過程序設(shè)計(jì)的方法進(jìn)行超長(zhǎng)整型數(shù)據(jù)的計(jì)算。運(yùn)算因子超出了整型能表示的范圍 ,肯定不能直接用一個(gè)數(shù)的形式來表示 .在C 語(yǔ)言中,能表示多個(gè)數(shù)的數(shù)據(jù)類型有兩種:數(shù)組和字符串。 因此采用字符串讀入數(shù)據(jù),用數(shù)組存儲(chǔ)數(shù)據(jù) 。解決了高級(jí)程序 設(shè)計(jì)語(yǔ)言處理數(shù)據(jù)存儲(chǔ)空間問題,實(shí)現(xiàn)了超長(zhǎng)整數(shù)的加減乘除求余運(yùn)算 .超長(zhǎng)整型數(shù)

2、據(jù)的存儲(chǔ)與運(yùn)算設(shè)計(jì)對(duì)超長(zhǎng)整數(shù)分別進(jìn)行了存儲(chǔ)與加減乘除求余運(yùn)算,達(dá)到了預(yù)期目標(biāo) ,最后對(duì)實(shí)現(xiàn)算法做了簡(jiǎn)要的分析和介紹。關(guān)鍵詞:超長(zhǎng)整型數(shù)據(jù);字符串;數(shù)組AbstractComputer calculation results, the precision of computer hardware environment is usually to the limit. In C language and VB to have long integer data of symbols of integers range is 2147483648 between the users to cant

3、 be changed。 However, we can use the word soft” way to solve this difficult, namely through programming method for long integer data calculation. Computing factor beyond the scope of integer can say, must not be directly used a number of forms。 In C, can say the number of data types is more than two

4、 kinds: arrays and string. Therefore, the use of input data using string array of data storage。 Solve a high-level programming language processing data storage space, the problem of long integer arithmetic for more add, subtract, multiply and divide。Long integer data storage and operation of long in

5、teger separately designed for the storage and add, subtract, multiply and divide more computing, and finally reached the expected goal to realize algorithm provides a brief introduction and analysis.Keywords: long integer;string;array目錄第一章 緒論.11.1 課程背景 .11。2 課程目的 .11.3 課程意義 .11.4 課程設(shè)計(jì)采取的基本原理和主要技術(shù)方法

6、.1第二章 設(shè)計(jì)簡(jiǎn)介及設(shè)計(jì)方案論述.22.1 程序的主要功能 .22。2 程序設(shè)計(jì)的思想 .22。2。1 運(yùn)算數(shù)據(jù)、結(jié)果的輸入和存儲(chǔ).22。2.2 超長(zhǎng)整數(shù)加法運(yùn)算.22。2.3 超長(zhǎng)整數(shù)減法運(yùn)算.32。2.4 超長(zhǎng)整數(shù)乘法運(yùn)算.32.2.5 超長(zhǎng)整數(shù)的整除及求余運(yùn)算.4第三章 詳細(xì)設(shè)計(jì).53。1 超長(zhǎng)整型數(shù)據(jù)的輸入 .53。2 超長(zhǎng)整數(shù)的加法 .53.3 超長(zhǎng)整數(shù)的減法 .63。4 超長(zhǎng)整數(shù)的乘法 .63。5 超長(zhǎng)整數(shù)的整除及求余 .7第四章 設(shè)計(jì)結(jié)果及分析.104。1 設(shè)計(jì)概述 .104.2 設(shè)計(jì)約束 .104。3 運(yùn)行流程 .10總 結(jié).11致 謝.12參考文獻(xiàn).13附錄.14第一章 緒

7、論1.1 課程背景 隨著現(xiàn)代社會(huì)計(jì)算機(jī)科學(xué)技術(shù)與經(jīng)濟(jì)的不斷飛速發(fā)展,計(jì)算機(jī)在科學(xué)計(jì)算與人們?nèi)粘I钪械膽?yīng)用也越來越普及,利用計(jì)算機(jī)實(shí)現(xiàn)一些數(shù)據(jù)的存儲(chǔ)與計(jì)算也顯得越來越重要,因而相對(duì)于科學(xué)計(jì)算精度的要求也越來越高。國(guó)民生產(chǎn)總值的統(tǒng)計(jì),中央銀行貨幣的統(tǒng)計(jì),國(guó)家糧食生產(chǎn)量的統(tǒng)計(jì)等超大數(shù)值統(tǒng)計(jì)都需要有高精度的數(shù)據(jù)處理方式.在數(shù)學(xué)上,大數(shù)研究也需要對(duì)超長(zhǎng)數(shù)值的運(yùn)算進(jìn)行處理。由此可見,超長(zhǎng)整形數(shù)據(jù)的設(shè)計(jì)的意義是重大而深遠(yuǎn)的.1.2 課程目的 學(xué)習(xí)并掌握計(jì)算機(jī)對(duì)于整型數(shù)據(jù)的存儲(chǔ)與運(yùn)算方法及原理,并能夠運(yùn)用 C語(yǔ)言來編寫程序,實(shí)現(xiàn)超長(zhǎng)整型數(shù)據(jù)的存儲(chǔ)與運(yùn)算,解決科學(xué)計(jì)算與實(shí)際生活中的相關(guān)問題。1。3 課程意義1

8、、掌握超長(zhǎng)整數(shù)的計(jì)算基本方法并能應(yīng)用。2、掌握超長(zhǎng)整數(shù)加法、超長(zhǎng)整數(shù)減法、超長(zhǎng)整數(shù)乘法。3、掌握超長(zhǎng)整數(shù)除法運(yùn)算中被除數(shù)、除數(shù)、商和余數(shù)之間的關(guān)系.4、分析總結(jié)常用超長(zhǎng)整數(shù)算法特點(diǎn),并能編寫相應(yīng)的程序。5、在學(xué)習(xí)的過程中應(yīng)強(qiáng)化“算法領(lǐng)先”的意識(shí),根據(jù)實(shí)際情況對(duì)超長(zhǎng)整數(shù)運(yùn)算進(jìn)行優(yōu)化的策略與方法。1.4 課程設(shè)計(jì)采取的基本原理和主要技術(shù)方法本程序是專門針對(duì)超長(zhǎng)整型數(shù)據(jù)而開發(fā)的一個(gè)功能齊全、操作簡(jiǎn)單的存儲(chǔ)與運(yùn)算程序。本程序?qū)崿F(xiàn)以下基本功能:操作人員可以對(duì)超長(zhǎng)整型數(shù)據(jù)進(jìn)行存儲(chǔ),還可以對(duì)所輸入的數(shù)據(jù)進(jìn)行準(zhǔn)確的加減乘以及整除求余運(yùn)算本系統(tǒng)使用的是 VC6。0 來開發(fā)的,由于 VC 良好的面向?qū)ο蠊δ?,真?/p>

9、實(shí)現(xiàn)了面向?qū)ο蟮脑O(shè)計(jì)。第二章 設(shè)計(jì)簡(jiǎn)介及設(shè)計(jì)方案論述2.1 程序的主要功能超長(zhǎng)整型數(shù)據(jù)的存儲(chǔ)與運(yùn)算的主要任務(wù)是用計(jì)算機(jī)對(duì) C 語(yǔ)言和 VB 中對(duì)于超出有符號(hào)的長(zhǎng)整型數(shù)據(jù)范圍2147483648 到 2147483647 的數(shù)據(jù)進(jìn)行存儲(chǔ)與運(yùn)算,如加法、減法、乘法、整除以及求余運(yùn)算,迅速準(zhǔn)確地完成對(duì)超長(zhǎng)整型數(shù)據(jù)的計(jì)算功能,快速輸出運(yùn)算結(jié)果。 2.2 程序設(shè)計(jì)的思想2。2.1 運(yùn)算數(shù)據(jù)、結(jié)果的輸入和存儲(chǔ)運(yùn)算因子超出了整型、實(shí)型能表示的范圍,肯定不能直接用一個(gè)數(shù)的形式來表示。在 C 語(yǔ)言中,能表示多個(gè)數(shù)的數(shù)據(jù)類型有兩種:數(shù)組和字符串。 數(shù)組:每個(gè)數(shù)組元素存儲(chǔ) 1 位(在優(yōu)化時(shí),這里是一個(gè)重點(diǎn)!),有多

10、少位就需要多少個(gè)數(shù)組元素;用數(shù)組表示數(shù)的優(yōu)點(diǎn):每一位都是數(shù)的形式,可以直接加減;運(yùn)算時(shí)非常方便。用數(shù)組表示數(shù)的缺點(diǎn):數(shù)組不能直接輸入;輸入時(shí)每?jī)晌粩?shù)之間必須有分隔符,不符合數(shù)值的輸入習(xí)慣;字符串:用字符串表示數(shù)的優(yōu)點(diǎn):能直接輸入輸出,輸入時(shí),每?jī)晌粩?shù)之間不必分隔符,符合數(shù)值的輸入習(xí)慣;用字符串表示數(shù)的缺點(diǎn):字符串中的每一位是一個(gè)字符,不能直接進(jìn)行運(yùn)算,必須先將它轉(zhuǎn)化為數(shù)值再進(jìn)行運(yùn)算;運(yùn)算時(shí)非常不方便;綜合以上所述,對(duì)上面兩種數(shù)據(jù)結(jié)構(gòu)取長(zhǎng)補(bǔ)短:用字符串讀入數(shù)據(jù),用數(shù)組存儲(chǔ)數(shù)據(jù):2。2.2 超長(zhǎng)整數(shù)加法運(yùn)算1、數(shù)據(jù)的接收和存儲(chǔ)采用字符串輸入的方式,設(shè)參與運(yùn)算的兩個(gè)數(shù)分別為 A 和 B,利用字符串函

11、數(shù)把字符串轉(zhuǎn)化為數(shù)值,將 A、B 中的每一位數(shù)字分別存儲(chǔ)在 A、B 兩個(gè)數(shù)組中,最低位在第一個(gè)單元中。2、確定和的位數(shù) 設(shè) LA 為 A 的位數(shù),LB 為 B 的位數(shù),則兩數(shù)之和的位數(shù)最大為較大加數(shù)位數(shù)加 1,即如果 LALB,則和的位數(shù)最大為 LA+1。3、進(jìn)位處理 兩數(shù)相加時(shí),從低位到高位,各位數(shù)字分別相加,然后對(duì)相加后的數(shù)和 10 進(jìn)行整除和求余運(yùn)算,整除之后的值為進(jìn)位,而余數(shù)就等于所求數(shù)之和。不斷重復(fù),直到最高位為止。 2.2.3 超長(zhǎng)整數(shù)減法運(yùn)算1、數(shù)據(jù)的接收和存儲(chǔ) 采用字符串輸入的方式,設(shè)參與運(yùn)算的兩個(gè)數(shù)分別為 A 和 B,利用字符串函數(shù)把字符串轉(zhuǎn)化為數(shù)值,將 A、B 中的每一位數(shù)

12、字分別存儲(chǔ)在 A、B 兩個(gè)數(shù)組中,最低位在第一個(gè)單元中。2、確定差的位數(shù) 設(shè) LA 為 A 的位數(shù),LB 為 B 的位數(shù),則兩數(shù)之差的位數(shù)最大為較大數(shù)的位數(shù),即如果 LALB,則差的位數(shù)最大為 LA.3、借位處理做減法運(yùn)算時(shí),要先判斷是否需要借位,如果需要借位,從上一位借過一個(gè) 10,上一位的數(shù)減去 1,處理完之后再相減。2.2.4 超長(zhǎng)整數(shù)乘法運(yùn)算1、數(shù)據(jù)的接收和存儲(chǔ) 采用字符串輸入的方式,設(shè)參與運(yùn)算的兩個(gè)數(shù)分別為 A 和 B,利用字符串函數(shù)把字符串轉(zhuǎn)化為數(shù)值,將 A、B 中的每一位數(shù)字分別存儲(chǔ)在 A、B 兩個(gè)數(shù)組中,最低位在第一個(gè)單元中。2、確定積的位數(shù) 設(shè) LA 為 A 的位數(shù),LB 為

13、 B 的位數(shù),乘積的位數(shù)最多為 LA+LB,最少為L(zhǎng)A+LB1。所以,乘積的位數(shù)上限為 LA+LB。3、算法首先計(jì)算被乘數(shù)與乘數(shù)的個(gè)位數(shù)字的乘積,把結(jié)果保存到積數(shù)組中,然后再用被乘數(shù)去乘以乘數(shù)的十位數(shù)字,把結(jié)果退一位加到積數(shù)組中。每加一次乘積結(jié)果就進(jìn)行一次進(jìn)位處理,其方法與加法中的進(jìn)位處理一樣。2。2。5 超長(zhǎng)整數(shù)的整除及求余運(yùn)算1、數(shù)據(jù)的接收和存儲(chǔ) 采用字符串輸入的方式,設(shè)參與運(yùn)算的兩個(gè)數(shù)分別為 A 和 B,利用字符串函數(shù)把字符串轉(zhuǎn)化為數(shù)值,將 A、B 中的每一位數(shù)字分別存儲(chǔ)在 A 和 B 數(shù)組中,最低位在第一個(gè)單元中。2、算法 可以用減法代替除法運(yùn)算:不斷比較 A1。.n與 B1。.n的大

14、小,如果A1。.n=B1.n則商 C1.。n+1C1。n,然后就是一個(gè)減法過程:A1。nB1.nA1。.n。由于簡(jiǎn)單的減法速度太慢,故必須進(jìn)行優(yōu)化。設(shè)置一個(gè)位置值 J,當(dāng) A1.nB1.n時(shí)。B1.。n左移B0.。n,j:=j+1,即令 B1.。n增大 10 倍.這樣就減少了減法的次數(shù)。當(dāng) j0 且 A1.nB0。n時(shí),B0。.n右移B0.n,j:=j1,即令 B1。.n縮小 10 倍。第三章 詳細(xì)設(shè)計(jì)3.1 超長(zhǎng)整型數(shù)據(jù)的輸入void input(int a1,int a2 ) /函數(shù) input 為輸入函數(shù),用來紀(jì)錄兩個(gè)待計(jì)算的超長(zhǎng)整數(shù) / int i,fa=1,fb=1; printf(

15、請(qǐng)輸入第一個(gè)數(shù):n”); scanf ( s”, b1); printf(”請(qǐng)輸入第二個(gè)數(shù):n” ); /輸入兩個(gè)超長(zhǎng)整型數(shù)據(jù)/ scanf(”s”,b2) ;lena = strlen( b1 ) ; /lena 紀(jì)錄 b1 的位數(shù)/ lenb = strlen( b2 ); /lenb 紀(jì)錄 b2 的位數(shù)/ if(b10=-) lena; da=-1;fa=0; /*判斷數(shù)組的符號(hào)/ if(b20=) lenb-; db=1;fb=0; for (i=0; ilena; i+,fa+) a1i=b1lenafa-0; /*把字符形數(shù)據(jù) b1 轉(zhuǎn)為整數(shù)形數(shù)據(jù),同樣用數(shù)組紀(jì)錄*/ for (i

16、=0; i0f) if(lenalenb) s=lena; else s=lenb; /用 s 紀(jì)錄結(jié)果的最大位數(shù)/ for(i=0;is;i+) ci=ai+bi+ci; ci+1=(int)ci/10; /*ci+1代表進(jìn)位*/ ci=(int)ci10; /*超長(zhǎng)整數(shù)加法運(yùn)算過程/ if(cs) s+; /*判斷最后結(jié)果的位數(shù)*/ if(dalenb) s=lena; else /用 s 紀(jì)錄結(jié)果的最大位數(shù)*/ s=lenb; for(i=s;ai=0;i) if(aibi) u=1; /*u 紀(jì)錄結(jié)果符號(hào)/ if(!u) /*超長(zhǎng)整數(shù)減法運(yùn)算過程/ for(i=0;is;i+) if(

17、ai1) s-; /*判斷最后結(jié)果的位數(shù)*/ if(f&(da0&uda0&u|u&!f)) printf(-”); if(da0&db0&!u) printf(); /*如果 u 為真是輸出負(fù)號(hào)*/ for(i=s1;i=0;i-) printf(”%d”,ci); else jiafa(a,b,1);3。4 超長(zhǎng)整數(shù)的乘法void chengfa( int a, int b ) /*超長(zhǎng)整數(shù)乘法運(yùn)算/ int i, j, c2*MAX = 0,s; s = lena + lenb 1; /*用 s 紀(jì)錄結(jié)果的最大位數(shù)/ for(i = 0;

18、i lena; i+) /*超長(zhǎng)整數(shù)乘法運(yùn)算過程/ for(j = 0;j b,返回 1;a=b,返回0;ab,返回-1int Compare(const char *a, const char b)int lenA = strlen(a);int lenB = strlen(b) ;if (a0=-) lenA-;if (b0=-) lenB;if (lenA != lenB) return lenA lenB ? 1 : 1;else return strcmp(a,b) ;/超長(zhǎng)正整數(shù)的減法,且被減數(shù)大于減數(shù)void cha(char *beijian, char jian, char

19、*chas)int cBMAX = 0;/用來存儲(chǔ)被減數(shù)的整型數(shù)組int cJMAX = 0 ;/用來存儲(chǔ)減數(shù)的整型數(shù)組int cCMAX = 0 ;/用來存儲(chǔ)兩數(shù)之差的整型數(shù)組int lenM = strlen(beijian) , lenS = strlen(jian);/被減數(shù)和減數(shù)字符串的長(zhǎng)度int i;/逆序復(fù)制減數(shù)和被減數(shù)到整型數(shù)組(因?yàn)闇p法運(yùn)算是從低位開始) ,保證 cB大于 cJ for (i=0; ilenM; i+) cBi = beijianlenM-1i 0; for (i=0; ilenS; i+) cJi = jianlenS-1i - 0;for (i=0; i=

20、 cJi)/被減數(shù)大于減數(shù),直接相減 cCi = cBi - cJi ; else /否則要向前借位 cCi = cBi + 10 cJi; -cBi+1; while (cCi-1 = 0) i-;int j = 0;int k;for (k=i1; k=0; k-,j+)/逆序存儲(chǔ)兩數(shù)之差到字符串 chas chasj = cCk + 0;chasj = 0;/超長(zhǎng)整型數(shù)據(jù)的整除,求余運(yùn)算void chufa(char beichu, char *chu, char shang, char *yu) int lenv=strlen(beichu),lens=strlen(chu);if(b

21、eichu0=)da=-1; /判斷數(shù)組的符號(hào) for(int i=0;ilenv;i+) beichui=beichui+1; lenv-;if(chu0=)db=1; for(int i=0;i= 0)/連減試商 s+; cha(yu, chu, yu); shangk+ = s + 0 ;/記錄每一位得到的商值 if (strcmp(yu, ”0”) = 0) strcpy(yu, ); /使余數(shù)的值為空,去掉多余的 0shangk = 0; /去掉多余的 0int j;for (i=0; shangi=0; i+) ;for (j=i; j=k; j+) shangji = shang

22、j; 第四章 設(shè)計(jì)結(jié)果及分析4.1 設(shè)計(jì)概述在不大于 10101-1 的整數(shù)范圍內(nèi)進(jìn)行存儲(chǔ)與運(yùn)算,有必要對(duì)數(shù)據(jù)的正負(fù)性進(jìn)行判斷,因而程序在總體上應(yīng)包含正整數(shù)與負(fù)整數(shù)的存儲(chǔ)與運(yùn)算。正負(fù)性的判斷與運(yùn)算是本程序體系結(jié)構(gòu)設(shè)計(jì)的核心。同樣對(duì)數(shù)據(jù)的整除求余運(yùn)算也同樣是本設(shè)計(jì)的一個(gè)難點(diǎn),因?yàn)樵谡笥噙\(yùn)算中采用的是豎式計(jì)算的方法,當(dāng)中還調(diào)用了減法的子函數(shù),無論是設(shè)計(jì)還是運(yùn)算都比較復(fù)雜。4.2 設(shè)計(jì)約束本程序必須實(shí)現(xiàn)對(duì)在 10101-1 范圍內(nèi)的所有超長(zhǎng)整數(shù)的存儲(chǔ)與運(yùn)算,超出這個(gè)數(shù)據(jù)范圍則程序停止運(yùn)行。4.3 運(yùn)行流程1、輸入數(shù)據(jù)2、數(shù)據(jù)存儲(chǔ)3、條件判斷4、進(jìn)行運(yùn)算5、輸出結(jié)果總 結(jié)此次課程設(shè)計(jì)對(duì)于我個(gè)人來說

23、具有很重大的意義,我學(xué)到了很多關(guān)于數(shù)據(jù)存儲(chǔ)與運(yùn)算方面的知識(shí),掌握了一些課程設(shè)計(jì)的方法與思想,了解了畢業(yè)設(shè)計(jì)的一些制作流程,同時(shí)這也是我第一次參加團(tuán)隊(duì)項(xiàng)目設(shè)計(jì),它不僅鍛煉了我的思維以及程序開發(fā)能力,也使我充分認(rèn)識(shí)到了團(tuán)隊(duì)合作的重要性,為我以后的求學(xué)之路打下了深厚的基礎(chǔ)。在此次編程開發(fā)過程中我深刻地體會(huì)到了自學(xué)能力的重要性。畢竟平時(shí)在課堂上學(xué)到的東西都是有限的,而且也只是一味的去接受,并不能主動(dòng)地去思考,其實(shí)在真正的設(shè)計(jì)實(shí)踐過程中還需要我們不斷的去努力去學(xué)習(xí),才能使該程序完成預(yù)期的目標(biāo)。在本次課程設(shè)計(jì)中我花費(fèi)了大量的時(shí)間借助圖書和網(wǎng)絡(luò)查閱了很多的相關(guān)資料,并和身邊的同學(xué)進(jìn)行了反復(fù)的討論與研究,經(jīng)過

24、不斷的思考和改進(jìn),初步完成了超長(zhǎng)整型數(shù)據(jù)的存儲(chǔ)與運(yùn)算的設(shè)計(jì)目標(biāo),用于解決實(shí)際問題。由于我自身的學(xué)識(shí)有限,加之時(shí)間比較倉(cāng)促,使得此程序可能存在某些不足之處,真誠(chéng)的歡迎老師、同學(xué)提出寶貴的意見,我將認(rèn)真聽取、改正努力提高自己。致 謝在課程設(shè)計(jì)完成之際,我首先要向指導(dǎo)老師張崗?fù)け硎咀钫鎿吹闹x意。張老師認(rèn)真負(fù)責(zé)的工作態(tài)度,嚴(yán)謹(jǐn)?shù)闹螌W(xué)精神和深厚的理論水平都使我收益匪淺。無論在理論上還是在實(shí)踐中,都給予了我們很大的幫助,使我得到不少的提高,這對(duì)于我們以后的工作和學(xué)習(xí)都是一種巨大的幫助,感謝他耐心的輔導(dǎo)。感謝系里給予的這次課程設(shè)計(jì)實(shí)踐機(jī)會(huì),感謝院系領(lǐng)導(dǎo)們和老師們的關(guān)心與幫助。同時(shí)還要感謝 08 級(jí)軟件工程(

25、2)班所有同學(xué)給予我的幫助,感謝我們這個(gè)小組的協(xié)同合作,正是有了這些幫助才使得我能夠順利的完成這次的課程設(shè)計(jì)。參考文獻(xiàn)1 吳金平。Visual C+ 6.0 編程與實(shí)踐M 。北京:中國(guó)水利水電出版社,20042 官章權(quán)。Visual C+ 6.0 高級(jí)編程范例M.北京:電子工業(yè)出版社,20023 王萍。 C+面向?qū)ο蟪绦蛟O(shè)計(jì)M。北京:清華大學(xué)出版社,2002 4 楊路明等。 C/C+程序設(shè)計(jì)教程M。 湖南:湖南科技出版社,20015譚浩強(qiáng).C 程序設(shè)計(jì)(第三版)M 。北京: 清華大學(xué)出版社, 20106嚴(yán)蔚敏吳偉民數(shù)據(jù)結(jié)構(gòu) M 北京: 高等教育出版社,2004附錄include stdio。h

26、include #include math.h#includestdlib。h#define MAX 101void jianfa(int a,int b,int f); / 函數(shù)功能:利用字符串實(shí)現(xiàn)超長(zhǎng)整數(shù)減法運(yùn)算int lena,lenb,da=1,db=1; /* 把 lena,lenb 設(shè)為全局變量,lena 紀(jì)錄第一個(gè)超長(zhǎng)整型數(shù)組的位數(shù),lenb 紀(jì)錄第二個(gè)超長(zhǎng)整型數(shù)組的位數(shù)*/char b1MAX , b2MAX; /紀(jì)錄需要計(jì)算的兩個(gè)超長(zhǎng)整型數(shù)據(jù) /void input(int a1,int a2) /*函數(shù) input 為輸入函數(shù),用來紀(jì)錄兩個(gè)待計(jì)算的超長(zhǎng)整型數(shù)據(jù)/ int i

27、,fa=1,fb=1; printf(”請(qǐng)輸入第一個(gè)數(shù):n); scanf ( %s, b1); printf(請(qǐng)輸入第二個(gè)數(shù):n”); /*輸入兩個(gè)超長(zhǎng)整型數(shù)據(jù)/ scanf(”%s”,b2);lena = strlen( b1 ); /*lena 紀(jì)錄 b1 的位數(shù)*/ lenb = strlen( b2 ); /*lenb 紀(jì)錄 b2 的位數(shù)*/ if(b10=- ) lena-; da=-1;fa=0; /判斷數(shù)組的符號(hào)*/ if(b20=) lenb; db=1;fb=0; for (i=0; ilena; i+,fa+) a1i=b1lenafa0; /*把字符形數(shù)據(jù) b1 轉(zhuǎn)為整

28、數(shù)形數(shù)據(jù),同樣用數(shù)組紀(jì)錄/ for (i=0; ilenb) s=lena; else s=lenb; /*用 s 紀(jì)錄結(jié)果的最大位數(shù)*/ for(i=0;i=0;i-) printf(”d,ci ); /輸出結(jié)果*/ else jianfa(a,b,1); void jianfa(int a,int b ,int f) /超長(zhǎng)整數(shù)減法運(yùn)算/ int i,u=0,cMAX+1=0,s; if(dadb0|f) if(lenalenb) s=lena; else /用 s 紀(jì)錄結(jié)果的最大位數(shù)/ s=lenb; for(i=s;ai=bi&i=0;i) if(aibi ) u=1; /u

29、紀(jì)錄結(jié)果符號(hào)*/ if(!u) /*超長(zhǎng)整數(shù)減法運(yùn)算過程/ for(i=0;is;i+) if(aibi) ai+1; ai+=10; ci=aibi; else /*當(dāng) ab 時(shí)的處理*/ for(i=0;is;i+) if(bi1) s-; /*判斷最后結(jié)果的位數(shù)*/ if(f&(da0&u|da0&u|u!f)) printf(); if(da0&db0&!u) printf(-) ; /如果 u 為真是輸出負(fù)號(hào)*/ for(i=s1;i=0;i-) printf(”%d,ci) ; else jiafa(a,b,1);void chengfa(

30、int a, int b) /*超長(zhǎng)整數(shù)乘法運(yùn)算/ int i, j, c2*MAX = 0,s; s = lena + lenb - 1; /*用 s 紀(jì)錄結(jié)果的最大位數(shù)*/ for(i = 0; i = 0; i-) printf(”%d,ci); /輸出結(jié)果/ /比較兩個(gè)用字符串存儲(chǔ)的超長(zhǎng)正整數(shù)的大小,若 ab,返回 1;a=b,返回0;a lenB ? 1 : -1;else return strcmp(a,b);/超長(zhǎng)正整數(shù)的減法,且被減數(shù)大于減數(shù)void cha(char *beijian, char *jian, char chas)int cBMAX = 0;/用來存儲(chǔ)被減數(shù)的

31、整型數(shù)組int cJMAX = 0;/用來存儲(chǔ)減數(shù)的整型數(shù)組int cCMAX = 0;/用來存儲(chǔ)兩數(shù)之差的整型數(shù)組int lenM = strlen(beijian) , lenS = strlen(jian);/被減數(shù)和減數(shù)字符串的長(zhǎng)度int i;/逆序復(fù)制減數(shù)和被減數(shù)到整型數(shù)組(因?yàn)闇p法運(yùn)算是從低位開始),保證 cB 大于 cJ for (i=0; i= cJi)/被減數(shù)大于減數(shù),直接相減 cCi = cBi cJi; else /否則要向前借位 cCi = cBi + 10 cJi; -cBi+1; while (cCi1 = 0) i-;int j = 0;int k;for (k=i-1; k=0; k,j+)/逆序存儲(chǔ)兩數(shù)之差到字符串 chas chasj = cCk + 0;chasj = 0;/超長(zhǎng)整型數(shù)據(jù)的整除,求余運(yùn)算void chufa(char beichu, char *chu, char shang, char yu) int lenv=strlen(beich

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論