1樓:
bool
ValidNum
(char
*Str)}
return
(true);}
void
ShowNum
(char
*Str
)char
*BigPlus
(char
*num_1
,char
*num_2
)// 將 p 和 q 分別移動到字串結尾;
char*p
=num_1
;for(;*
p;++p
);char
*End=p
;char*q
=num_2
;for(;*
q;++q
);char
*Last=q
;intn=
p-num_1
;int
Len=q-
num_2
;char*S
=num_1
;char*T
=num_2
;// 將 S 調整為較短的字串;if(n>
Len)
++Len
;// 可能有 1 + 99 這樣, 連續進製, 數字會增加 1 位;
char
*Sum=(
char*)
calloc(1
+Len
,sizeof
(char
));// 末尾有'\0', 所以是 1 + Len;
End=
Len+
Sum;
char*r
=End
;for(*
r='\0';--
r>=Sum;*r
='0'
);// p 比 q 先到達最高位, 所以是 p > S;
for(r=
End-1;
p>S;
)// T 可能還有剩餘部分;
while(q
>T)// 剩餘的高位補'0';
while(r
>Sum)
return
(Sum);}
char
*BigMultiply
(char
*num1
,char
*num2)if
('0'==*
num1
||'0'==*
num2
)char*p
=num1
;for(;*
p;++p
);const
intLen_1=p
-num1
;char*q
=num2
;for(;*
q;++q
);char
*Last=q
;const
intLen_2
=Last
-num2
;const
intLen=1
+Len_1
+Len_2
;char
*Ans=(
char*)
calloc
(Len
,sizeof
(char
));char
*End
=Len-1
+Ans
;char*r
=End;*
r='\0'
;for(;r
>Ans;*(
--r)=
'0');
inta=0
;intc=
0;for(;--p
>=num1;)r
=--End;if(
0==a)
for(q=
Last;--
q>=num2
;)if(0
==c)*
r+=(c
*=a)%
10;if(
*r>'9')*(
--r)+=
c/10;
if(*r
>'9')}}
return
(Ans);}
以上是超大整數的加法以及乘法, 用字串操作; 減法和除法可以用類似的思路;
#include
#include
#include
"Smile.h"
intmain
(int
argc
,char
**argv
)char
*Str_c
=NULL
;printf
("輸入不超過%d位的2個正整數, 計算兩者之和, 輸入Q退出.\n"
,MaxLen
);while
(true
)printf
("Num_2=\t"
);scanf
("%s"
,Str_b
);if
(NULL==(
Str_c
=BigPlus
(Str_a
,Str_b
)))else
free
(Str_c);}
free
(Str_a
);free
(Str_b
);scanf
("%*s"
);return0;}
2樓:
好多人沒回答到點子上,你這個題的意思其實就是讓你去手動做二進位制加減法,開個大陣列,char型別的,乙個位元組存8位,然後自己手動去做位運算,迴圈進製,最後再轉一下進製回到10進製。
如果要求不是很高,乙個位元組當乙個10進製數字也勉勉強強算能用,實現起來更簡單一點
3樓:紅狐
這個問題是自己要定義一種型別,100萬位的整數型別,然後再實現其加減運算,int型在C語言裡,一般是儲存在4個位元組的記憶體裡,最高位為符號位,代表正數還是負數,剩餘的31位表示整數值。
參考系統的設計,那我們來設計乙個100萬位的整數,100萬位如果是10進製,那就是10的100萬次方,在二進位制數字表達的世界裡,10=2的3次方到2的4次方之間,所以我們只能取2的4次方來儲存,那麼10的100萬次方就需要50萬個8位char來儲存,可以定義這個型別的儲存結構為 unsigned char[500001];
最高位元組作為符號位元組,可以定義0為正,1為負。每個位元組表示兩位的整數,用BCD編碼來儲存
至於加減,那就是小學裡學的了,無非是進製和退位,那就是迴圈去計算即可;
4樓:勝勳
我能想到的方法是,利用陣列
char data1[1000000];
char data2[1000000];
然後,乙個乙個加,做進製處理
5樓:章魚哥
使用陣列模擬即可。
int32在十進位制下,可以儲存10位,且最高位為2,考慮到加減進製問題,所以模擬陣列中,單個位置可以儲存9位的數字。
整個算下來,只需要兩個20w的陣列,即可模擬得出結果。
6樓:葉芝秋
你可以用乙個char陣列、int陣列或者long long陣列來儲存乙個超長的大整數。
如果是int,那麼採用萬進製,也就是乙個四個位元組儲存四位十進位制。這是為了方便運算同時保證不會產生溢位。其實還可以乙個用int存8位甚至9位十進位制,存9位計算起來不方便。
存8位的話,你需要借助乙個long long變數來處理乘法。比如兩個大整數裡面的某個int裡面都儲存超過了6萬多的數,一相乘起來就超過了int的表達範圍,產生溢位,使運算結果出錯,所以在處理乘法的時候需要把乘數和結果轉換成long long。然後模10^8儲存為當前int,除以10^8進製。
有錢人賺到一百萬與平民賺到一百萬有什麼區別?
自渡 有錢人掙一百萬可以是一兩天的事情,平民掙一百萬可能是一輩子的事情。要看是用錢,掙錢還是用腦力掙錢,還是用腦力掙錢。如果是用錢,掙錢就很快。 橙子 本錢天差地別,怎麼比?你普通人甚至小老闆辛苦賺的錢可能還不如人家閒錢放銀行的利息多,怎麼比?有什麼可比性 人家拆借過橋的利息,都夠普通人賺一輩子了 ...
給你一百萬買車還是買房?
已登出 百分百是買房而不是買車,買車一時爽,買房一直爽。買房住的沒問題了,其他一切好說,房子有了,什麼工作都可以在乙個城市活得很滋潤。而如果買車,你除了每天交不完的停車費加油費過路費,你還居無定所。我一同學她交了乙個男朋友,她男朋友在認識她前用30 買一輛車,那點錢在我們那邊買房都夠一半價錢了。我同...
如何快速積累到一百萬?
丁少爺de胡同堂子 可以了解一下抖音服務商專案,專案內容就是為想在抖音開通電商功能的使用者提供開通服務,然後返點抽提成,市場還是比較空白的,推廣非常好做!利潤能達到300 原因很簡單 抖音在2020年形成電商閉環,屆時是乙個風口紅利期!具體情況可以找我了解,我手上有上等資源,我自己也在做! trad...