兩個超大整數相加 c

2021-06-14 11:19:46 字數 1338 閱讀 1092

昨天面試有個題,時間太緊,來不及寫了,回家除錯一下:

函式原型 bool add(const char *a, const char *b, char * dest);

思路: 模擬人工加法的過程,先從末尾開始加。如果存在進製,則標記

#include

using namespace std;

bool add(const char *a, const char *b, char * dest)

int ilena = strlen(a);

int ilenb = strlen(b);

const char *pbtail = (b+ilenb-1);

const char *patail = (a+ilena-1);

bool bisneed = false; //標記是否需要進製

int imaxlen = (ilenb>ilena?ilenb:ilena);

char *ret = new char[imaxlen+2];

memset(ret,0,imaxlen+2);

const char *head = ret;

for(;ilena>=0||ilenb>=0;ilena--,ilenb--,pbtail--,patail--)

if(ilenb<=0)

char temp = c1 + c2

- '0' + (bisneed==true?1:0);

if(temp > '9')

if(ilena<=0 && ilenb<=0 && temp == '0')

*ret = temp;

ret++;

}//將字串反轉儲存

int len = strlen(head);

dest[len] = '\0';

char *ptail = (dest + len - 1);

while(*head != '\0')

return  true;

void main()

{char *a = "99999999999999999999990";

char *b = "11";

char *c = new char[50];

memset(c,0,10);

add(a,b,c);

cout《測試用例:

a  '9999999999990' ,b '11'

a  '0',b '1199999000'

a  '0',b '0'

a  '555555',b '555555'

a  '1',b '999999999999999999'

a  '9',b '9'

演算法 兩個超大整數相乘

處理問題時有時候會遇到兩個超大數相乘,那麼他們的乘積整數就有可能存不下。說一下各個整型的範圍 型別說明 名稱 位元組數範圍 int4 2147483648 2147483647 short int 2 32768 32767 long 4 2147483648 2147483647 long lon...

超大整數相加

輸入 第乙個數字m代表接下來有幾組資料 接下來每一組資料報含兩個資料,數字很大哦 確保沒有字首0,資料很大 輸出輸出計算後的結果,每個結果佔一行 樣例輸入 3123 456 1234567890987654321 9876543210123456789 11111111111111111111111...

JS如何實現兩個超大數相加

如果想要對兩個超大的整數進行加法運算,但又想輸出一般形式,使用 是無法達到的,因為一旦結果值超過number.max safe integer就會被轉換成科學計數法,並且數字精度相比之前將會有誤差,此時需要自己寫一套加法演算法,原理就是小學學習加減法時候的演算法,相應位數字相加,滿十進一。funct...