昨天面試有個題,時間太緊,來不及寫了,回家除錯一下:
函式原型 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...