大整数加法
大整数减法
||
\/
+:进位
-:借位
*:进位
高精度*单精度 2^n
now = 2^k (高精度)
*2 (单精度)
把now的每一个数位 *对应单精度的数
进位
考虑最高位有没有变化
高精度*高精度
每次
a的第i位 * b的第j位,为什么结果是计算给第(i+j-1)位
ai*10^(i-1)
bj*10^(j-1)
ai * bj * 10^(i+j-2)
对第(i+j-1)位有 ai*bj的贡献
代码
#include <iostream>
#include <string>
#include <vector>
using namespace std;
vector <int> sub(vector<int> &A, vector<int> &B)
{
vector <int> C;
for(int i=0,t=0; i<A.size(); i++)
{
t=A[i]-t;
if(i<B.size())
t-=B[i];
C.push_back((t+10)%10);
if(t<0)
t=1;
else
t=0;
}
while(C.size()>1 && C.back()==0)
C.pop_back();
return C;
}
void trimZero(vector<int> &A)
{
while(A.back()==0 && A.size()>1)
A.pop_back();
}
int main()
{
bool flag=false;
string a,b;
vector <int> A,B;
cin >> a >> b;
for(int i=a.size()-1;i>=0;i--)
A.push_back(a[i]-'0');
for(int i=b.size()-1;i>=0;i--)
B.push_back(b[i]-'0');
vector <int> C=sub(A, B);
trimZero(C);
for(int i=C.size()-1;i>=0;i--)
cout << C[i];
cout<<endl;
return 0;
}