C 關於大整數運算的問題

時間 2025-06-15 22:45:15

1樓:網友

用double型的數就可以啊。

c語言中,%只能用於整數運算的運算子?

2樓:惠企百科

c語言中,%只能用於整數運算的運算子,%是求餘運算子,只能適用於整數與整數運算,如果用於非整數運算,程式會報錯導致無法執行。

a選項錯誤,是因為在c語言中,語句之間的分割要用英文狀態下的分號去分割,即「;」而不是冒號。

d選項正確,是因為%是除法取餘運算,適用於整數與整數運算。否則,不同的編譯器會得不同結果。作為雙目運算子,左右運算元可以是數值,也可以是表示式,但是左右兩邊的運算元必須是整數。

c語言中,%只能用於整數運算的運算子?

3樓:解韻昔夏萱

在c程式中,語句之間必須要用分號「;」分隔。

而printf("%d",a);中第乙個%為字元,第二與d結合不是運算子,%當運算子時就是取餘運算。

4樓:鏡奇買以南

在c的輸出語句中%這個是個輸出資料型別表示符號,不是運算子號,在c中%在運算式子中只能取模整數型別的資料型別,a:c語言中語句結束才是用;符號,而不是:符號,這個:

只用在swtich或是相同型別的語句採用:

5樓:赧衣牟若彤

a:語句必須以分號結束,但語句之間還可以用大括號。

d:單獨的乙個%,是取餘運算子,取餘要在整數之間進行。%和d,f,c之類的連用,應該看作乙個整體!不能單獨看成乙個運算子!!!

6樓:守軒桓山雁

你a打錯了吧??分號也不是冒號啊。。。你說的printf("%d")這的%也不是運算子啊。。。當運算子時就是取餘運算子。。。兩邊必須是整型資料。。。

7樓:秒懂百科

運算子:用於c語言中執行程式**運算。

c語言中,哪些運算子必須是整型數的呢?

8樓:網友

在c語言中,運算物件必須是整型數的運算子是:

求餘運算子%

位運算子~、&

具體原因是:

【c++】大整數除法的演算法

9樓:網友

你首先需要實現大整數的減法。這個從低到高位減即可。

還需要實現大整數乘以乙個個位數的演算法。從低位向高位乘即可。

10樓:等待的幸福快樂

第一種方法是求倒數,根據牛頓迭代法,設序列,遞推公式為x(n+1)=2x(n)-ax(n)²,a為常數且為正,則當x0∈(0,1]時有lim(xn)=1/a,且精度隨著迭代次數指數增長。故方法一為根據遞推公式求除數的倒數(因為被除數大於1,倒數一定小於1,可以用定點數表示),然後乘以被除數即得到原來的商。迭代次數為logn,每次迭代中需要進行一次移位和兩次大整數乘法,定點數乘法還要額外加一次移位,總時間複雜度為o(logn * n + nlogn + nlogn)) o(nlog²n);

第二種方法是第一種方法的改進版,設被除數為a,除數為b,則寫成分式為a/b,分式具有分子分母同時乘以非零數值不變的性質,首先將分子分母乘以一常數x,使得bx∈(0,1],然後將分子分母同時乘以(2-分母),不斷進行迭代直至分母足夠接近1,此時分子即是所求的商。與方法一相比,方法二不需要估算x0,每次迭代仍然需要兩次乘法兩次移位,因此時間複雜度仍然是 o(nlog²n)。部分amd處理器的浮點除法採用此方法進行;

第三種方法即是常用的試商法。分為按位試商和按雙字試商兩種。按位試商只要逐一移位比較即可,時間複雜度o(n²)。

按雙字試商則由於試商存在誤差,必須在試商之後用試商乘以除數與被除數作比較,由於是雙字乘以大整數時間為線性,總體時間複雜度為o(n+(n-1)+(n-2)+(n-3)+.1)=o(n(n+1)/2)=o(n²)。總之試商法的時間複雜度是o(n²)。

那麼問題來了,方法一和方法二的共同特點是,每次迭代都必須進行兩次至少n位的乘法,因此浪費了大量時間。實測即使是數萬位數的除法(尤其是被除數遠遠長於除數的情況下,為了降低定點數誤差就必須將被除數和除數左移位相當長的距離)方法二的時間依然是方法三的時間的數十倍甚至上百倍。而且方法三可以同時獲得商和餘數,方法一和方法二都做不到。

怎麼用c語言編寫乙個大整數的四則運算器,求解??(急!!)

11樓:網友

給你完整**沒意思了,呵呵,給你思路。

加法。兩個加數長度。

la=strlen(a);lb=strlen(b);

lc=la>lb?la:lb; /最長的那個。

反序兩個加數。

strrev(a);strrev(b);

要是字串的話,需要轉換為int型的陣列,ab陣列一樣。

for(i=0;a[i];ia++)

a[i]-=48;

處理第一位,也就是個位。

c[0]=a[0]+b[0];

處理中間各位。

for(i=1;i9)

最後轉換回字串。

for(i=0;ic[i]+=48;

c[lc]='0'; 注意要加上字串結束符,要不然不是字串,呵呵。

反序就是結果了。

strrev(c);

c字串就是結果。

減法,前面差不多,只是處理中間和後面的稍微有點區別,首先,要判斷結果是否為負數,這個要只乙個標誌位。

if(strcmp(

flag=1;

else求長度和反序是必須的,轉換為int型也是一樣的。

處理個位,也一樣。

中間各位。for(i=1;i處理高位的那些0

while(c[lc-1])

lc--;轉換為char字串。

for(i=0;ic[i]+=48;

最後是標誌正負號的。

if(!flag)

c[lc]='0';

strrev(c);

乘法,兩個演算法。

乙個是被乘數連續加,並且乘數每次減去1,知道乘數為零,注意的是加的次數要剛好是乘數的個數。

這個呼叫加法和減法就可以,用for迴圈,呵呵。

**也不算難,要是寫不出來,就不要學c了。

另乙個是小學的豎式。如。

x 12也就是計算中間的個位和多位的乘法,最後對好位置加起來就可以。

**也不是很難,最好做乙個一位和多位的乘法子函式,呼叫,呵呵。

除法,道理我只知道一種,就是迴圈減法,直到被除數小於除數為止,這個應該也不難。

記錄減得次數就是要得到的資料,還有乙個就是餘數,就是判斷小於除數的那個資料。

12樓:網友

具體實現演算法如下:

測試結果如下:

13樓:網友

參考小學的加法。

低位相加,逢十進一。

用字串儲存大數,然後從字串的末尾開始一位一位的處理。

14樓:軍臨天下

這個可以一位一位的處理。。

c語言中最大的整型數和最小的整型數是什麼?

15樓:網友

c語言中最大的無符號整型常數為65535,最小的無符號整型常數為0。最大的有符號整型常數為32767,最小的有符號整型常數為-32768。

在c編譯系統中,基本整型的長度也為16位,因此表示的數的範圍也是有限定的。十進位無符號整常數的範圍為0~65535,有符號數為-32768~+32767。如果使用的數超過了上述範圍,就必須用長整型數來表示。

長整型數是用字尾「l」或「l」來表示的。

16樓:網友

基本整形佔4個位元組,長度為32位。所以表示範圍為負2的15次方到2的15次方減1.

表示範圍是指能夠表達最小數到最大數。

17樓:修者世界

c語言中,一般而言整型數是雙位元組,所以:

有符號型:最大 32767,最小 -32768無符號型:最大 65535,最小 0

但對於c++,面對32位機時,整型數變成了雙字,所以:

有符號型:最大 2147483647,最小 -2147483648無符號型:最大 4294967295,最小 0

18樓:源語夢

得看具體作業系統。

32位系統,範圍為 -2^15 到 2^15-1 之間。

19樓:網友

這個是與編譯系統有關的,在vc上,一般加入#include

然後可以用int_max int_min分別輸出最大和最小值。

在c語言程式設計中,如何避免整數運算溢位問題

c語言編譯時不會檢查資料溢位問題,需要程式設計者自行注意資料溢位問題。而且據我的經驗資料溢位問題會頻繁出現在初學習當中,程式寫多了就很少出現這樣的問題了。如何找到在c程式 全部 整數溢位 因為輸入float時,系統也會把float變成整型,所以只需要處理非數值型就可以了,程式如下。void main...

C 過載 運算子的問題,c 運算子過載問題

只拿了你有疑問的兩個函式出來討論,看是否明白 time time operator 這是字首 return this time time operator int 這是字尾 return temp time operator 這表示前 即 time1 呼叫該函式 time operator int ...

整數加法減法的運算定律,整數加法的運算定律在小數加減法中同樣適用

1111143333333333333 運演算法則 1.整數加法計演算法則 相同數位對齊,從低位加起,哪一位上的數相加滿十,就向前一位進一.2.整數減法計演算法則 相同數位對齊,從低位加起,哪一位上的數不夠減,就從它的前一位退一作十,和本位上的數合併在一起,再減.3.整數乘法計演算法則 先用一個因數...