Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <algorithm>
- #include <vector>
- using namespace std;
- using ll = long long;
- const int N = 2e6+7, osn = 10;
- struct digit{
- int a;
- digit(int g){
- a = g;
- }
- digit(){
- a = 0;
- }
- };
- struct LongNumber{
- vector<digit> nmb;
- LongNumber(){
- nmb.clear();
- }
- LongNumber(long long h){
- nmb.clear();
- if(h == 0){
- nmb.push_back(digit(0));
- return;
- }
- while(h > 0){
- nmb.push_back(digit(h % osn));
- h /= osn;
- }
- }
- void print(){
- for(int i = nmb.size() - 1; i >= 0; i--){
- cout << nmb[i].a;
- }
- cout << "\n";
- }
- };
- LongNumber operator + (LongNumber& a, LongNumber& b){
- if(a.nmb.size() < b.nmb.size()){
- swap(a,b);
- }
- LongNumber answ;
- int carry = 0;
- for(int i = 0; i < b.nmb.size(); i++){
- int k = carry + b.nmb[i].a + a.nmb[i].a;
- carry = 0;
- carry += k / osn;
- k %= osn;
- answ.nmb.push_back(digit(k));
- }
- if(carry != 0){
- answ.nmb.push_back(digit(carry));
- }
- return answ;
- }
- LongNumber operator * (LongNumber& a, LongNumber& b){
- LongNumber answ;
- answ.nmb.resize(a.nmb.size() + b.nmb.size());
- for(int i = 0; i < answ.nmb.size(); i++){
- answ.nmb[i].a = 0;
- }
- for(int i = 0; i < a.nmb.size(); i++){
- for(int j = 0; j < b.nmb.size(); j++){
- int total_dg = i + j;
- answ.nmb[total_dg].a += a.nmb[i].a * b.nmb[j].a;
- }
- }
- int carry = 0;
- for(int i = 0; i < answ.nmb.size(); i++){
- int k = carry + answ.nmb[i].a;
- carry = 0;
- carry += k / osn;
- k %= osn;
- answ.nmb[i] = digit(k);
- }
- if(answ.nmb[answ.nmb.size() - 1].a == 0){
- answ.nmb.pop_back();
- }
- return answ;
- }
- signed main() {
- auto n = LongNumber(999);
- auto m = LongNumber(999);
- n.print();
- n = n*m;
- n.print();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement