using namespace std; //一个大整数一个整数的除法,和余数; vector<int> div(vector<int> &A, int b, int &r){ vector<int> c; //int tmp = 0; r = 0; for(int i = 0; i < A.size(); i++){ r = r * 10 + A[i]; c.push_back(r / b); r = r % b; } reverse(c.begin(),c.end()); while(c.size() > 1 && c.back() == 0) c.pop_back(); return c; } //一个大整数,一个整数的乘法 vector<int> muti(vector<int>A, int b){ vector<int> c; int tmp = 0; for(int i = 0; i < A.size(); i++){ tmp += A[i] * b; c.push_back(tmp % 10); tmp /= 10; } while(tmp){ c.push_back(tmp % 10); tmp /= 10; } return c; } //两个大整数 vector<int> muti1(vector<int> &A, vector<int> &B){ vector<int> c(A.size() + B.size()); for(int i = 0; i < A.size(); i++){ for(int j = 0; j < B.size(); j++){ c[i + j + 1] += A[i] * B[j]; } } for(int i = A.size() + B.size() - 1; i > 0; i--){ if(c[i] >= 10){ c[i - 1] += c[i] / 10; c[i] %= 10; } } return c; //注意有可能有前导0; }
//大数减法; bool cmp(vector<int> &A, vector<int> &B){ if(A.size() != B.size()) return A.size() > B.size(); for(int i = A.size() - 1; i >= 0; i--){ if(A[i] != B[i]) return A[i] > B[i]; } return true; } vector<int> sub(vector<int> &A, vector<int> &B){ if(cmp(A,B)){ vector<int>c; int tmp = 0; for(int i = 0; i < A.size(); i++){ tmp += A[i]; if(i < B.size()) tmp -= B[i]; c.push_back((tmp + 10)%10); //tmp /= 10; if(tmp < 0)tmp = -1; else tmp = 0; } while(c.size() > 1 && c.back() == 0) c.pop_back(); return c; } else { cout<<"-"; return sub(B,A); } } //大数加法 vector<int> add(vector<int> &A, vector<int> &B){ if(A.size() < B.size()) return add(B,A); int tmp = 0; vector<int>c; for(int i = 0; i < A.size(); i++){ tmp += A[i]; if(i < B.size())tmp += B[i]; c.push_back(tmp%10); if(tmp >= 10) tmp = 1; else tmp = 0; } if(tmp)c.push_back(tmp); return c; } int main() { string a,b; //int b,r = 0; cin>>a>>b; vector<int>A,B,C; for(int i = a.length() - 1; i >= 0; i--)A.push_back(a[i] - '0'); for(int i = b.length() - 1; i >= 0; i--)B.push_back(b[i] - '0'); //C = div(A,b,r); C = add(A,B); for(int i = C.size() - 1; i >= 0; i--)cout<<C[i]; cout<<endl; //cout<<endl; return 0; }
|