c語言程式求助懇求各路前輩求助,C語言程式求助!!!懇求各路前輩求助。。。

2021-12-25 10:55:55 字數 2450 閱讀 4130

1樓:延澈左

c語言中的任何數值型別都是有一定的取值範圍。

型別識別符號型別說明位元組長度取值範圍

char字元型1-(2^7)~(2^7-1)

unsigned char無符號字元型10 ~ (2^8-1)

short int短整型2-(2^15)~(2^15-1)

unsigned short int無符號短整型20 ~ (2^16-1)

int整型4-(2^31)~(2^31-1)

unsigned int無符號整型40 ~ (2^32-1)

float實型(單精密度)4

double實型(雙精密度)8

long double實型(長雙精密度)10

顯然,如果要處理乙個很大很大的數,好比有1000位,則這些數值型別肯定都不能用。這就是經典的大數處理問題。

大數處理有許多方法,此刻我也只是處於剛開始學階段,乙個想法就是把數字看成是字元,哄騙記憶體動態分配和字串來處理大數。這個方法比較直**,但效率不高。

實現兩個大數的相加:

1、自定義乙個大數相加的函式庫:

bignumadd.h

/* 把數字看成字元,從而獲取數字作為字元型陣列的元素 */

char *numadd(char *a, char *b);

bignumadd.c

#include

#include

/* 我們的習慣都是從個位數開始相加 */

/* 當把數字看成字串時,根據輸入順序,字元陣列元素c[0]是最高位,c[num-1]才是個位數 */

/* 為了和習慣相同,而且對於兩個數字的位數不同時,更有必要把陣列元素的順序反置,使c[0]是個位數,這樣才方便逐位相加 */

/* 把乙個字元陣列cbegin裡的元素按相反順序放置得到新的字元陣列clast */

char *reverse(char *cbegin)

/* 加法最重要的就是確定進製 */

/* 好比(7 8)=15,則5 = (7 8)應該就是和sum在該位的值,1 = (7 8)/10則是孕育發生的進製 */

char *numadd(char *a, char *b)/* 兩個字元陣列的元素逐一相加 */

if(*pb)

*ps = s '0';/* 確定sum在在該位上的值,並把數字轉換成字元 */

ps ;

s /= 10;/* 確定進製 */

}if(s)/* 最高位是不是有進製 */

*ps= '\0';

return reverse(sum);

}2、對兩個大數相加(挪用自定義的庫函式)

/********************************

* 讓兩個大數相加;

* 任何數值型別都是有一定範圍的;

* 對於兩個很大的數相加;

* 則應把數字看成字元;

* 哄騙動態分配記憶體的方式處理;

* *****************************/

#include

#include

#include

#include "bignum.h"

char *getnum();

int main()

char *getnum()/* 把輸入的數字看成是字元,存入字元陣列 */

*(num2 len-1) = c;/* 陣列元素從0開始 */

*(num2 len) = '\0';

num1 = num2;

}return num1;

}擺平!!!

2樓:半夢的看書亼

去掉最後乙個優化

用計算機組成原理上的原始方法,用陣列模擬bit位,模擬加法器執行

如果你沒學過計算機組成原理,就無視此題吧

3樓:匿名使用者

不知道c語言的位移運算能不能解決這個問題,我也一直在想,可是都沒有做出來。

求助!!!c語言漢諾塔問題 樣例已經通過,但是過不了oj 實在找不出原因 故求助各位前輩大神!

4樓:物理公司的

#include

int main()

{int n,p,q,i,j,flag;

int a[4][65];

scanf("%d",&n);

while(n--)

{flag=1;

scanf("%d%d",&p,&q);

for(i=1;i<=p;++i)

a[1][i]=p-i+1;

a[1][0]=p;

a[2][0]=0;

a[3][0]=0;

while(q--)

{scanf("%d%d",&i,&j);

if(a[i][a[i][0]]&&(a[j][a[j][0]]==0||a[i][a[i][0]]

C語言微控制器程式求助

void main 這種方法原理簡單易行,缺點是精度比定時器稍低,注意不要使x y溢位。我們還可以對上面的程式優化 void main 用計數器做!和中斷 中斷設定成 邊沿觸發中斷 在中斷的同時開啟計數器,並判斷是此時高電平還是低電平,然後等到下乙個中斷到來,將計數器的內容另存,然後清空重新計數 這...

c語言新手求助,C語言程式設計 新手求助

因為 中用錯了輸出控制符,應該將printf f n num 中的 f改成 d才是。此程式中,已定義num為整型變數,而在後面的printf 輸出時,型別被描述為浮點數 f 這樣寫法是有問題的。c語言中,整型變數和浮點型變數在記憶體中的存放格式是不一樣的。整型變數表示的是乙個16位長的二進位制數,在...

C語言問題,C語言問題,求助

while語句的執行順序 1.判斷x的值 非0為真,0為假 2.執行 3.執行 裡面的 這裡是空,所以沒任何動作。所以會一直迴圈到x 0,判定為假,迴圈終止。接著執行減減,最後列印結果為 1 c語言問題,求助 這題是迷惑人用的.因為迴圈內部沒有break,所以for會一直執行下去,直到a 11,這時...