演算法基本思想及步驟
1.用陣列儲存大整數,從低位到高位依次儲存
2.模擬人工加、減、乘、除法
題目關鍵點:兩數每一位相加、減、乘、除時的中間值的處理
題目
給定兩個正整數,計算它們的和。
輸入格式
共兩行,每行包含乙個整數。
輸出格式
共一行,包含所求的和。
資料範圍
1≤整數長度≤1000000
輸入樣例
1223
輸出樣例
35**
#include
#include
using
namespace std;
//c = a + b, 滿足a >= 0, b >= 0
vector<
int>
add(vector<
int>
&a, vector<
int>
&b)if
(t) c.
push_back(1
);//若最後得到的中間值不為0,則向最高位前進制
return c;
}int
main()
題目
給定兩個正整數,計算它們的差。
輸入格式
共兩行,每行包含乙個整數。
輸出格式
共一行,包含所求的差。
資料範圍
1≤整數長度≤10^6
輸入樣例
3211
輸出樣例
21**
#include
#include
using
namespace std;
//比較a、b大小
bool
cmp(vector<
int>
&a, vector<
int>
&b)return
true
;//若a、b相等,則if條件為真
}//c = a - b, 滿足a >= b, a >= 0, b >= 0
vector<
int>
sub(vector<
int>
&a, vector<
int>
&b)while
(c.size()
>
1&& c.
back()
==0) c.
pop_back()
;//消去c中最高位可能出現的0
return c;
}int
main()
else
return0;
}
題目
給定兩個正整數a和b,請你計算a*b的值。
輸入格式
共兩行,第一行包含整數a,第二行包含整數b。
輸出格式
共一行,包含a*b的值。
資料範圍
1≤a的長度≤1000000
1≤b≤10000
輸入樣例23
輸出樣例
6**
#include
#include
using
namespace std;
//c = a * b,滿足a >= 0, b > 0
vector<
int>
mul(vector<
int>
&a,int b)
while
(c.size()
>
1&& c.
back()
==0) c.
pop_back()
;//消去c中最高位可能出現的0
return c;
}int
main()
題目
給定兩個正整數a,b,請你計算a/b的商和餘數。
輸入格式
共兩行,第一行包含整數a,第二行包含整數b。
輸出格式
共兩行,第一行輸出所求的商,第二行輸出所求餘數。
資料範圍
1≤a的長度≤1000000
1≤b≤10000
輸入樣例72
輸出樣例31
**
#include
#include
#include
using
namespace std;
//a / b, 商是c,餘數是r
vector<
int>
div(vector<
int>
&a,int b,
int&r)
reverse
(c.begin()
, c.
end())
;//反轉c中數的順序得到商
while
(c.size()
>
1&& c.
back()
==0) c.
pop_back()
;//消去c中最高位可能出現的0
return c;
}int
main()
(模板**於acwing使用者yxc) 演算法基礎 高精度加 減 乘 除
大整數 將數字從個位開始儲存 高精度乘法 高精度除法 的驗證 include include using namespace std bool cmp vector int v1,vector int v2 vector int sub vector int v1,vector int v2 whi...
高精度演算法,加減乘除
高精度演算法的兩個基本問題 高精度數的表示和高精度數的基本運算 1.高精度數的表示 首先我想到的是do while 迴圈逆序存放在陣列之中,但書中用string接受並且將其轉化成數字,存放在陣列之中 int arr 100 string str cin str int len str.length ...
高精度演算法(加減乘除)
最近開始學習解決大數問題,在這裡記錄下自己的學習情況。問題描述 我有乙個非常簡單的問題。給定兩個整數a和b,你的工作是計算a b的和。輸入 輸入的第一行包含整數t 1 t 20 表示測試用例的數量。然後是t行,每行包含兩個正整數,a和b.請注意,整數非常大,這意味著您不應該使用32位整數來處理它們。...