求助c語言做超大整數的加減,用棧實現

2022-02-28 14:30:17 字數 5883 閱讀 2253

1樓:匿名使用者

#include

#include

#include

#include

#include

#define m 40

/*定義堆疊*/

typedef structstack;

/*初始化堆疊*/

initstack(stack *s)

/*判斷棧是否為空*/

int stempty(stack *s)

else }

/*入棧操作*/

stpush(stack *s,double x)

else }

/*出棧操作*/

double stpop(stack *s)

else

return t;

} /*獲取棧頂元素*/

double stgettop(stack *s)

else

return t;

} /*將數字字元轉換成整形*/

int chrtransferint(char c)

return n;

} /*獲取兩個操作符之間數字字元的個數,返回的是最後一個數字字元的位置*/

int getnumsize(char str,int n1)

return n2;

} /*判斷上個函式中獲得的數字字串中是否包含小數點,並返回它的位置,不包含,返回-1*/

int isincludepoint(char str,int n1,int n2) }

return n3;

} /*將數字字元轉換成數值*/

double transfer(char str,int n1,int n2,int n3) }

else

for(i=n3+1;i<=n2;i++) }

return data;

} /*主程式*/

main()

while(i

else if(isdigit(c))

else if(c=='+')

else if(c=='-')

else if(c=='*')

else }

else if(c=='/')

else }

else if(c==')')

else if(p==3) }

if(stgettop(so)==4) /*然後判斷so棧頂是否為'*'或者'/'*/

else if(stgettop(so)==5)

i++;

} else if(c=='=')

else if(p==3) }

i++;

} }if(!stempty(so)||stempty(sd))

else

printf("%f\n",end);

2樓:匿名使用者

/*加法*/

int addmbint1(mbigint* dst, mbigint* src1, mbigint* src2)

//較小數位的整數的長度

len = (src1->length>src2->length)? src2->length: src1->length;

for(i = 0; i < len; i++) //對兩個大整數的數位相同部分進行計算

//對第一個大整數數位多出部分進行計算

if(src1->length > src2->length)

if(mark != 0)

dstlen = src1->length + 1;

}//對第二個大整數數位多出部分進行計算

else if(src1->length < src2->length)

if(mark != 0)

dstlen = src2->length + 1;

}dst->sign = sign; //符號的更改

dst->length = dstlen; // 長度設定

return 1;

}int extendmbint(mbigint *mbi,long int size)

if((pt = (un_short *)realloc(mbi->pbigint,sizeof(un_short)*newalloc)) == null)

return faile_memory_bint;

mbi->pbigint = pt;

for(i = mbi->alloclen; i < newalloc; ++i) /* 對新的元素置0*/

mbi->alloclen= newalloc;

}return return_ok_bint;

}/*符號相反的加法--減法*/

int addmbint2(mbigint* dst, mbigint* src1, mbigint* src2)

int re = comparembint(src1,src2); //對兩個大整數進行無符號比較

if(re == 0) //兩個大整數大小相等,進行加法運算後位0

if(re == -1)//無符號比較,大整數src2比大整數src1大

for(i = 0;i< len1; i++)//對兩整數相同長度部分進行計算

while(i < len)//對數位較大部分的計算

else

}dst->length = len; //長度設定

dst->sign = sign; //符號位設定

trimmbint(dst); //對結果去掉前面的0

return 1;}

3樓:匿名使用者

main()

void chang(int x,int p);

while(top)

選擇排序

#include"stdio.h"

void selectsort(int s,int n)另外,虛機團上產品**,超級便宜

4樓:匿名使用者

可以參考c++寫的一個超大整數的運算

5樓:匿名使用者

long int len = 0; //兩個大整數的長度最大值long int dstlen = 0; //目標陣列分配的最大值un_short mark = 0;//進位標誌unsigned int result;//陣列對應元素相加結果long sign = src1->sign;//整數的符號int i = 0;

6樓:

用c實現不能用c++?

用鏈棧實現是指用鏈棧實現加減還是這個整數?

怎樣用c語言做超大整數的加減運算?

7樓:匿名使用者

用高精度演算法來實現,即用陣列或指標來儲存數字,例如a〔20〕來儲存a ,用b〔20〕來儲存b,這樣a 和b就可以是很大的數,再用一個c〔21〕來儲存結果,為什麼c要21呢,你知道,加法是要近位的,呵呵。這裡給出相加的偽**,d =0/*用來儲存近位*/,for i=0到19if d 不等於0 c〔i+1〕=d ,再逆的輸出c就可以了!程式設計要學會思考,現在你可以試試編下高精度乘法,例如可以輸出100的階乘!

8樓:匿名使用者

可以用陣列製作。

都知道int,float,double的精度和可使用的範圍都是有限的,對於大數相減,總是會產生溢位的情況。

所以對於大數相減,認為可以用陣列來做。比如,定義一個陣列a[100];a[1]用來儲存個位數,a[2]用來儲存十位數,等等。

如果a[i]的值大於或等於10,就讓a[i+1]++,a[i]-10就行了。

在列印的時候就用一個for語句,再調一下輸出格式就可以了。

9樓:匿名使用者

可以用兩個整數來表示一個整數,一個高位,一個低位

c語言中怎麼實現兩個超大整數的相加減乘除

10樓:奧妙的數學開拓

在本題中要實現兩個超大整數的計算,主要是靠快速算式,改變運算的傳統過程,準確無誤的求出結果。例如(1)9988+8899=10000-12+8899=18899-12=18887;(2)980886-88906=980886-90000-6+1100=890880+1100=891980;(3)999786x99999=999786x100000-999786=99978600000-1000000+214=99977600214;(4)8950700÷50000=8950700÷100000x2=89.507x2=179.

014。

11樓:匿名使用者

c語言加減乘除超大數

12樓:

可以將它們化為十六進位制來計算。

怎樣用c語言做超大整數的減法運算?

13樓:全瑞繡

設計一個比較長的陣列來記錄各位數值,計算就行。

示例:const int maxl = 512;

//_num表示各位數值,_len表示數值長度,_num[i]表示該位是10^i的位置

struct hugenumber;

//實現這個函式,就有減法了,具體就參照小學數學的減法寫個借位減法就行了

超級大的整數的加減用c語言怎麼寫? 20

14樓:

可以用陣列製作。

都知道int,float,double的精度和可使用的範圍都是有限的,對於大數相減,總是會產生溢位的情況。

所以對於大數相減,認為可以用陣列來做。比如,定義一個陣列a[100];a[1]用來儲存個位數,a[2]用來儲存十位數,等等。

如果a[i]的值大於或等於10,就讓a[i+1]++,a[i]-10就行了。

在列印的時候就用一個for語句,再調一下輸出格式就可以了。

要求用c語言編寫程式實現大整數的四則運算(加、減、乘、除) 20

15樓:匿名使用者

如果只是實現(加、減、乘、除)那麼,直接用文字檔案儲存就好,雖然效率略低,但可以保證精確度。

直接按照小學教的加減乘除原理,逐位進行計算,保證無線精確(記憶體不夠大、cpu不夠快不算)。 這個我就能做。

16樓:匿名使用者

學習c語言就去敗筆網路安全小組

17樓:豬頭或火寶寶

俺用c語言編的,但是用棧實現的!!!

18樓:鬼angel鬼

很感興趣 可是不會 支援你

用c語言實現大整形運算,64位長整型的加減法,輸入限制為64位長度整數

19樓:匿名使用者

#include

#include

#define n 1005

int main()

j=0;

for(i=len2-1; i>=0; i--)for(i=0; i=10) //大於10進位}if(num2[max]==1)

printf("%d",num2[max]);

for(i=max-1; i>=0; i--) //這樣就把大整數的每一位算出來了,順序輸出就好

printf("%d",num2[i]);

printf("\n");

}return 0;}

用C語言編寫求梯形面積的程式, 求助 用C語言編寫求梯形面積公式的簡易計算器

include void main include void main float a,b,h 梯形的上底 下底和高 printf 請依次輸入梯形的上底 下底和高 scanf f f f a,b,h printf 梯形的面積 f a b h 2 擴充套件資料 c語言特有特點 1.c語言是一個有結構化...

C語言作業求助 計算a,b是鍵盤輸入的正整數。且在輸入時能保證1ab

可能你想問的是輸出a到b之間的質數吧。下面是我編的 有什麼不足的地方你再改正一下吧。include int fun int x 宣告函式 判斷是否是質數 void main for i a 1 i if j printf a,b之間沒有質數。n 如果j 0,說明沒有數輸出 else printf n...

輸入兩個整數,進行加減乘除四則運算的c語言程式怎麼寫啊,拜託

include int main c語言中的加減乘除和數學中的加減乘除一樣,不同在於回符號的答表示問題,乘號需要用 表示。除號需要用 表示。新手學習c語言,很容易把除號和取餘好混淆,強調一下,取餘號是 百分號就是取餘的意思。因此在輸入兩個整數以後,按照數學方法就可以直接輸出結果,整數的輸入用scan...