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

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(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ù)書(shū)摘 要計(jì)算機(jī)計(jì)算結(jié)果的精度,通常要受到計(jì)算機(jī)硬件環(huán)境的限制。在C語(yǔ)言和VB中對(duì)于有符號(hào)的長(zhǎng)整型數(shù)據(jù)的范圍是-2147483648到2147483647之間,用戶一般是無(wú)法改變的。但是,我們可以通過(guò)“軟”的方式來(lái)解決這一困難,即通過(guò)程序設(shè)計(jì)的方法進(jìn)行超長(zhǎng)整型數(shù)據(jù)的計(jì)算。運(yùn)算因子超出了整型能表示的范圍,肯定不能直接用一個(gè)數(shù)的形式來(lái)表示。在C語(yǔ)言中,能表示多個(gè)數(shù)的數(shù)據(jù)類(lèi)型有兩種:數(shù)組和字符串。因此采用字符串讀入數(shù)據(jù),用數(shù)組存儲(chǔ)數(shù)據(jù)。解決了高級(jí)程序設(shè)計(jì)語(yǔ)言處理數(shù)據(jù)存儲(chǔ)空間問(wèn)題,實(shí)現(xiàn)了超長(zhǎng)整數(shù)的加減乘除求余運(yùn)算。超長(zhǎng)整型數(shù)據(jù)的存儲(chǔ)與運(yùn)算設(shè)計(jì)對(duì)超長(zhǎng)整數(shù)分別進(jìn)行了存儲(chǔ)與加減乘除求余

2、運(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 be changed. However, we ca

3、n 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 kinds: arrays a

4、nd 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 integer separately

5、 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ù)方法 1第二章 設(shè)計(jì)簡(jiǎn)介及設(shè)計(jì)方案論述 22

6、.1 程序的主要功能 22.2 程序設(shè)計(jì)的思想 2 2 2 3 3 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第一章 緒論1.1 課程背景 隨著現(xiàn)代社會(huì)計(jì)算機(jī)科學(xué)技術(shù)與經(jīng)濟(jì)的不斷飛速發(fā)展,計(jì)算機(jī)在科學(xué)計(jì)算與人們?nèi)粘I钪械膽?yīng)用也越來(lái)越普及,利用計(jì)算機(jī)實(shí)現(xiàn)一些數(shù)據(jù)的存儲(chǔ)與計(jì)算也顯得越來(lái)越重要,因而相對(duì)于科學(xué)計(jì)算精度的要求也越來(lái)越高。國(guó)民生

7、產(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)行處理。由此可見(jià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ǔ)言來(lái)編寫(xiě)程序,實(shí)現(xiàn)超長(zhǎng)整型數(shù)據(jù)的存儲(chǔ)與運(yùn)算,解決科學(xué)計(jì)算與實(shí)際生活中的相關(guān)問(wèn)題。1.3 課程意義1、掌握超長(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),并能編寫(xiě)相應(yīng)的程序。5、在學(xué)習(xí)的過(guò)程中

8、應(yīng)強(qiáng)化“算法領(lǐng)先”的意識(shí),根據(jù)實(shí)際情況對(duì)超長(zhǎng)整數(shù)運(yùn)算進(jìn)行優(yōu)化的策略與方法。1.4 課程設(shè)計(jì)采取的基本原理和主要技術(shù)方法本程序是專(zhuān)門(mén)針對(duì)超長(zhǎng)整型數(shù)據(jù)而開(kāi)發(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來(lái)開(kāi)發(fā)的,由于VC良好的面向?qū)ο蠊δ?,真正?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)算

9、,如加法、減法、乘法、整除以及求余運(yùn)算,迅速準(zhǔn)確地完成對(duì)超長(zhǎng)整型數(shù)據(jù)的計(jì)算功能,快速輸出運(yùn)算結(jié)果。 2.2 程序設(shè)計(jì)的思想運(yùn)算因子超出了整型、實(shí)型能表示的范圍,肯定不能直接用一個(gè)數(shù)的形式來(lái)表示。在C語(yǔ)言中,能表示多個(gè)數(shù)的數(shù)據(jù)類(lèi)型有兩種:數(shù)組和字符串。數(shù)組:每個(gè)數(shù)組元素存儲(chǔ)1位(在優(yōu)化時(shí),這里是一個(gè)重點(diǎn)?。卸嗌傥痪托枰嗌賯€(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í)慣;用

10、字符串表示數(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ù):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為B的位數(shù),則兩數(shù)之和的位數(shù)最大為較大加數(shù)位數(shù)加1,即如果LA>LB,則和的位數(shù)最大為L(zhǎng)A+1。3、進(jìn)位處理  兩數(shù)相加時(shí),從低位到高位,各

11、位數(shù)字分別相加,然后對(duì)相加后的數(shù)和10進(jìn)行整除和求余運(yùn)算,整除之后的值為進(jìn)位,而余數(shù)就等于所求數(shù)之和。不斷重復(fù),直到最高位為止。    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為B的位數(shù),則兩數(shù)之差的位數(shù)最大為較大數(shù)的位數(shù),即如果LA>LB,則差的位數(shù)最大為L(zhǎng)A。3、借位處理做減法運(yùn)算時(shí),要先判斷是否需要借位,如果需要借位,從上一位借過(guò)

12、一個(gè)10,上一位的數(shù)減去1,處理完之后再相減。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為B的位數(shù),乘積的位數(shù)最多為L(zhǎng)A+LB,最少為L(zhǎng)A+LB-1。所以,乘積的位數(shù)上限為L(zhǎng)A+LB。3、算法首先計(jì)算被乘數(shù)與乘數(shù)的個(gè)位數(shù)字的乘積,把結(jié)果保存到積數(shù)組中,然后再用被乘數(shù)去乘以乘數(shù)的十位數(shù)字,把結(jié)果退一位加到積數(shù)組中。每加一次乘積結(jié)果就進(jìn)行一次進(jìn)位處理,其方法與加法中的進(jìn)位處理一

13、樣。 超長(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的大小,如果A1.n>=B1.n則商C1.n+1C1.n,然后就是一個(gè)減法過(guò)程:A1.n-B1.nA1.n。由于簡(jiǎn)單的減法速度太慢,故必須進(jìn)行優(yōu)化。設(shè)置一個(gè)位置值J,當(dāng)A1.n>B1.n時(shí)。B1.n左移B0.n,j:=j+1,即令B1.n增大10倍。這樣就減少了減法的次數(shù)。當(dāng)

14、j>0且A1.n 時(shí), B0.n 右移 B0.n , j:=j-1 ,即令 B1.n 縮小 10 倍。 第三章 詳細(xì)設(shè)計(jì)3.1 超長(zhǎng)整型數(shù)據(jù)的輸入void input(int a1,int a2 /*函數(shù)input為輸入函數(shù),用來(lái)紀(jì)錄兩個(gè)待計(jì)算的超長(zhǎng)整數(shù) */ int i,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

15、紀(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; i + a1i=b1lena-fa-'0' /* 把字符形數(shù)據(jù) b1 轉(zhuǎn)為整數(shù)形數(shù)據(jù) , 同樣用數(shù)組紀(jì)錄 */ for (i=0; i a2i=b2lenb-fb-'0' /* 同上 */ 3.2 超長(zhǎng)整數(shù)的加法 void jiafa(int a,int b,int f /*超長(zhǎng)整數(shù)加法

16、運(yùn)算*/int i,cMAX+1=0,s;if(da*db>0|fif(lena>lenb s=lena;else s=lenb; /*用s紀(jì)錄結(jié)果的最大位數(shù)*/for(i=0;i ci=ai+bi+ci;ci+1=(intci/10; /*ci+1代表進(jìn)位*/ci=(intci%10; /*超長(zhǎng)整數(shù)加法運(yùn)算過(guò)程*/ if(cs s+; /*判斷最后結(jié)果的位數(shù)*/if(da<0&&f|da<0 printf("-"for(i=s-1;i>=0;i- printf("%d",ci; /*輸出結(jié)果*/ else

17、jianfa(a,b,1;3.3 超長(zhǎng)整數(shù)的減法void jianfa(int a,int b,int f /*超長(zhǎng)整數(shù)減法運(yùn)算*/int i,u=0,cMAX+1=0,s;if(da*db>0|fif(lena>lenb s=lena;else /*用s紀(jì)錄結(jié)果的最大位數(shù)*/ s=lenb;for(i=s;ai<=bi&&i>=0;i-if(ai 紀(jì)錄結(jié)果符號(hào) */ if(!u /*超長(zhǎng)整數(shù)減法運(yùn)算過(guò)程*/for(i=0;i if(ai ai+1-;ai+=10;ci=ai-bi;else /*當(dāng)a 時(shí)的處理 */ for(i=0;i if(bi bi

18、+1-;bi+=10;ci=bi-ai;while(!cs-1&&s>1 s-; /*判斷最后結(jié)果的位數(shù)*/if(f&&(da>0&&u|da<0&&!u|da>0&&(db>0&&u|u&&!f printf("-" if(da<0&&db<0&&!u printf("-" /*如果u為真是輸出負(fù)號(hào)*/for(i=s-1;i>=0;i- printf("

19、%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; i < lena; i+ /*超長(zhǎng)整數(shù)乘法運(yùn)算過(guò)程*/for(j = 0;j < lenb; j+ci+j = ai * bj + ci+j;ci+j+1 = ci+j / 10 + ci+j+1;ci+j = ci+j % 10;while(!cs s-; /*判斷最后結(jié)果的位數(shù)*/if

20、(da*db<0 printf("-"for(i = s; i >= 0; i- printf("%d",ci; /*輸出結(jié)果*/3.5 超長(zhǎng)整數(shù)的整除及求余/比較兩個(gè)用字符串存儲(chǔ)的超長(zhǎng)正整數(shù)的大小,若a>b,返回1;a=b,返回0;a ,返回 -1 int Compare(const char *a, const char *bint lenA = strlen(a;int lenB = strlen(b;if (a0='-' lenA-;if (b0='-' lenB-;if (lenA != len

21、Breturn lenA > lenB ? 1 : -1;elsereturn strcmp(a,b;/超長(zhǎng)正整數(shù)的減法,且被減數(shù)大于減數(shù)void cha(char *beijian, char *jian, char *chasint cBMAX = 0;/用來(lái)存儲(chǔ)被減數(shù)的整型數(shù)組int cJMAX = 0;/用來(lái)存儲(chǔ)減數(shù)的整型數(shù)組int cCMAX = 0;/用來(lái)存儲(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)算是從低位開(kāi)始),保證cB大

22、于cJfor (i=0; i cBi = beijianlenM-1-i - '0'for (i=0; i cJi = jianlenS-1-i - '0'for (i=0; i 減法運(yùn)算過(guò)程 if (cBi >= cJi/被減數(shù)大于減數(shù),直接相減cCi = cBi - cJi;else /否則要向前借位cCi = cBi + 10 - cJi;-cBi+1;while (cCi-1 = 0i-;int j = 0;int k;for (k=i-1; k>=0; k-,j+/逆序存儲(chǔ)兩數(shù)之差到字符串chaschasj = cCk + '0&#

23、39;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(beichu0='-'da=-1; /判斷數(shù)組的符號(hào)for(int i=0;i beichui=beichui+1;lenv-;if(chu0='-'db=-1;for(int i=0;i chui=chui+1;lens-;if (Compare(beichu, chu = 0/被除數(shù)等于除

24、數(shù)strcpy(shang, "1"strcpy(yu, "0"return ;if (strcmp(chu, "0" = 0 | Compare(beichu, chu < 0/被除數(shù)小于除數(shù)strcpy(shang, "0"strcpy(yu, beichu;return ;char buf2 = "0"/臨時(shí)數(shù)組依次存儲(chǔ)被除數(shù)的每一位數(shù)int i, s, k;strcpy(yu, "" /先使余數(shù)的值為空f(shuō)or (i=0,k=0; beichui!='0&

25、#39; i+s = 0;buf0 = beichui;strcat(yu, buf;/接上被除數(shù)的一位數(shù),改變當(dāng)前余數(shù)while (Compare(yu, chu >= 0/連減試商s+;cha(yu, chu, yu;shangk+ = s + '0'/記錄每一位得到的商值if (strcmp(yu, "0" = 0strcpy(yu, "" /使余數(shù)的值為空,去掉多余的0shangk = '0' /去掉多余的0int j;for (i=0; shangi='0' i+;for (j=i; j&l

26、t;=k; j+shangj-i = shangj; 第四章 設(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ù),無(wú)論是設(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、

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

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

29、與幫助。同時(shí)還要感謝08級(jí)軟件工程(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附錄#

30、include #include #include #include #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ù),用來(lái)紀(jì)錄兩個(gè)待計(jì)算的超長(zhǎng)整型數(shù)據(jù)*/int i,fa=1,fb=1;

31、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; i 把字符形數(shù)據(jù) b

32、1 轉(zhuǎn)為整數(shù)形數(shù)據(jù) , 同樣用數(shù)組紀(jì)錄 */ for (i=0; i 同上 */ void jiafa(int a,int b,int f /*超長(zhǎng)整數(shù)加法運(yùn)算*/int i,cMAX+1=0,s;if(da*db>0|fif(lena>lenb s=lena;else s=lenb; /*用s紀(jì)錄結(jié)果的最大位數(shù)*/for(i=0;i ci=ai+bi+ci;ci+1=(intci/10; /*ci+1代表進(jìn)位*/ci=(intci%10; /*超長(zhǎng)整數(shù)加法運(yùn)算過(guò)程*/ if(cs s+; /*判斷最后結(jié)果的位數(shù)*/if(da<0&&f|da<0 pri

33、ntf("-"for(i=s-1;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(da*db>0|fif(lena>lenb s=lena;else /*用s紀(jì)錄結(jié)果的最大位數(shù)*/ s=lenb;for(i=s;ai<=bi&&i>=0;i-if(ai 紀(jì)錄結(jié)果符號(hào) */ if(!u /*超長(zhǎng)整數(shù)減法運(yùn)算過(guò)程*/for(i=0;

34、i if(ai ai+1-;ai+=10;ci=ai-bi;else /*當(dāng)a 時(shí)的處理 */ for(i=0;i if(bi bi+1-;bi+=10;ci=bi-ai;while(!cs-1&&s>1 s-; /*判斷最后結(jié)果的位數(shù)*/if(f&&(da>0&&u|da<0&&!u|da>0&&(db>0&&u|u&&!f printf("-" if(da<0&&db<0&&!u pri

35、ntf("-" /*如果u為真是輸出負(fù)號(hào)*/for(i=s-1;i>=0;i- printf("%d",ci;else jiafa(a,b,1;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; i < lena; i+ /*超長(zhǎng)整數(shù)乘法運(yùn)算過(guò)程*/for(j = 0;j < lenb; j+ci+j = ai * bj + ci+j;ci+j+1 = ci+j / 10

36、+ ci+j+1;ci+j = ci+j % 10;while(!cs s-; /*判斷最后結(jié)果的位數(shù)*/if(da*db<0 printf("-"for(i = s; i >= 0; i- printf("%d",ci; /*輸出結(jié)果*/ /比較兩個(gè)用字符串存儲(chǔ)的超長(zhǎng)正整數(shù)的大小,若a>b,返回1;a=b,返回0;a ,返回 -1 int Compare(const char *a, const char *bint lenA = strlen(a;int lenB = strlen(b;if (a0='-' lenA

37、-;if (b0='-' lenB-;if (lenA != lenBreturn lenA > lenB ? 1 : -1;elsereturn strcmp(a,b;/超長(zhǎng)正整數(shù)的減法,且被減數(shù)大于減數(shù)void cha(char *beijian, char *jian, char *chasint cBMAX = 0;/用來(lái)存儲(chǔ)被減數(shù)的整型數(shù)組int cJMAX = 0;/用來(lái)存儲(chǔ)減數(shù)的整型數(shù)組int cCMAX = 0;/用來(lái)存儲(chǔ)兩數(shù)之差的整型數(shù)組int lenM = strlen(beijian, lenS = strlen(jian;/被減數(shù)和減數(shù)字符串的長(zhǎng)度

38、int i;/逆序復(fù)制減數(shù)和被減數(shù)到整型數(shù)組(因?yàn)闇p法運(yùn)算是從低位開(kāi)始),保證cB大于cJfor (i=0; i cBi = beijianlenM-1-i - '0'for (i=0; i cJi = jianlenS-1-i - '0'for (i=0; i 減法運(yùn)算過(guò)程 if (cBi >= cJi/被減數(shù)大于減數(shù),直接相減cCi = cBi - cJi;else /否則要向前借位cCi = cBi + 10 - cJi;-cBi+1;while (cCi-1 = 0i-;int j = 0;int k;for (k=i-1; k>=0; k-,j+/逆序存儲(chǔ)兩數(shù)之差到字符串chaschasj = cCk + '0'chasj = '0'/超長(zhǎng)整型數(shù)據(jù)的整除,求余運(yùn)算void

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論