最簡單的思路是直接用int型陣列儲存大數的每一位,程式比較容易實現,但是效率稍低,直接上**。
#include#includeusing namespace std;
class bign
bign(const bign&t)
bign operator=(const bign&t)
bign operator=(const char*t)
bign operator+(const bign&t)const
else if (i > pos_high)
else
}if (r > 0)
ans.num[i] = 1, ans.pos_high = i;
else
ans.pos_high = i - 1;
return ans;
} bign operator*(const bign&t)const
if (r > 0)
te.num[j+i] = r,te.pos_high=j+i;
else
te.pos_high = j-1+i;
ans = ans + te;
} return ans;
} bign operator++()
if (r > 0)
num[i] = 1,pos_high++;
return *this;
} bool operator<(const bign&t) }
friend ostream& operator<<(ostream&out,const bign&x)
int mod(int mod) };
int main()
int型可以表示所有9位數,僅表示一位不僅浪費空間,而且增加了9倍的運算次數,故可以用int表示9位數進行優化,如123456789這個數占1個,1234567890佔兩個。乘法採用模擬手動演算法的方法,各位依次相乘,最後相加。直接看**吧。
#include#includeusing namespace std;
const int mod = 1000000000;
class bign
bign(char*t)
if (b > 0)
bign operator+(const bign&t)const
else if (i >= t.len)
else
}if (r > 0)
ans.num[i] = r, ans.len = i + 1;
else
ans.len = i;
return ans;
} bign operator+(const int&t)
if (r > 0)
ans.num[len] = 1, ans.len = len + 1;
else
return ans;
} bign operator*(const bign&t)const
if (r > 0)
te.num[i + j] = (int)r, te.len = i + j + 1,r=0;
else
te.len=i + j;
ans = ans + te;
} return ans;
} bign operator*(const int&t)
if (r > 0)
ans.num[i] = (int)r, ans.len = i + 1, r = 0;
else
ans.len = i ;
return ans;
} friend ostream& operator<<(ostream&out, const bign&t)
}else out << 0;//大數佔0位直接輸出0
return out;
} bool operator<(const bign&t) }
};int main()
大數相加,大數相乘
題目 大數相加鏈結 思路 為了方便兩個字串相加,我們將短的字串,前面補0,最重要的一點是我們需要設定進製標誌ok class solution for int i size num2 i for int i longsize 1 i 0 i else ret c ret if ok 1 return...
大數相乘 大數相加
大數相乘 大數相乘 1 include includeint main int ans i while lb 0 int cnt j for i 0 i 0 i if e i break 去除前面多餘的0 if i 1 else 當結果是0的時候 printf 0 printf n return 0...
list 相加 大數相加
演算法流程 1 大數可能超出任何一種整數型別,會引發溢位問題,所以用字串的格式儲存字串a,b 2 獲取字串a的長度為alen,字串b的長度為blen 3 比較alen和blen的大小,用maxlen儲存更大值。4 建立陣列aarr,大小為maxlen,儲存字串a每一位上的值 5 建立陣列barr,大...