Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <cstring>
- using namespace std;
- const int osn10 = 1000;
- const int osn = 3;
- const int maxnum = 100000;
- void print(int a, int base){
- int p = a;
- int len = 0;
- while(p > 0){
- len++;
- p /= 10;
- }
- while(len < base){
- base--;
- cout << "0";
- }
- if(a)
- cout << a;
- }
- int str_to_int(string s){
- int res = 0;
- for(int i = 0; i < s.size();i++){
- res = res * 10;
- res = res + (s[i] - '0');
- }
- return res;
- }
- struct BigNum{
- int b[maxnum];
- int len;
- BigNum(){
- memset(b,0,sizeof(b));
- len = 0;
- }
- void convert(string s){
- len = s.size();
- string p;
- int pos = 0;
- for(int i = s.size() - 1; i >= 0; i -= osn){
- int start = i - osn + 1;
- if(start < 0) start = 0;
- p=s.substr(start,i - start + 1);
- b[pos] = str_to_int(p);
- pos++;
- }
- len = pos;
- }
- void read(){
- string s;
- cin >> s;
- convert(s);
- }
- void write(){
- cout << b[len-1];
- for(int i = len - 2; i >= 0; i--){
- print(b[i],osn);
- }
- }
- BigNum mult(int a){
- BigNum res;
- int next = 0;
- res.len = len;
- int k = 0;
- for(int i = 0; i < len; i++){
- res.b[i+k] = b[i] * a + next;
- next = res.b[i+k] / osn10;
- res.b[i+k] = res.b[i+k] % osn10;
- }
- if(next){
- res.b[len] = next;
- res.len++;
- }
- return res;
- }
- BigNum mult(BigNum a){
- BigNum res;
- int next = 0;
- for (int k = 0; k < a.len; k ++ ){
- for(int i = 0; i < len | next; i++){
- res.b[i+k] += b[i] * a.b[k] + next;
- next = res.b[i+k] / osn10;
- res.b[i+k] = res.b[i+k] % osn10;
- }
- }
- int pos = len + a.len;
- while (pos>0 && !res.b[pos])
- pos--;
- res.len = pos + 1;
- return res;
- }
- BigNum sum(BigNum a){
- BigNum res;
- res.len = max(a.len,len);
- int next = 0;
- for(int i = 0;i < res.len; i++){
- res.b[i] = b[i] + a.b[i] + next;
- if(res.b[i] >= osn10){
- next = 1;
- res.b[i] = res.b[i] - osn10;
- } else{
- next = 0;
- }
- }
- if(next == 1){
- res.len++;
- res.b[res.len - 1] = 1;
- }
- return res;
- }
- BigNum minys(BigNum a){
- BigNum resm;
- int next = 0;
- resm.len = (max(a.len,len));
- for(int i = 0; i < len;i++){
- resm.b[i] = b[i] - a.b[i];
- if(resm.b[i] < 0) {
- resm.b[i] = a.b[i] - b[i];
- resm.b[i] = -resm.b[i];
- }
- }
- while(resm.len>1 && resm.b[resm.len - 1] == 0){
- resm.len--;
- }
- return resm;
- }
- int compare(BigNum a){
- if(a.len > len){
- return -1;
- }
- if(len > a.len){
- return 1;
- }
- for(int i = a.len-1; i >= 0; i --){
- if(a.b[i] > b[i]){
- return -1;
- }
- if(b[i] > a.b[i]){
- return 1;
- }
- }
- return 0;
- }
- };
- int main()
- {
- ios_base::sync_with_stdio( false );
- cin.tie();
- cout.tie();
- BigNum a,b;
- string s;
- b.read();
- cin >> s;
- a.read();
- if(s[0] == '-'){
- b = b.minys(a);
- }else{
- b = b.sum(a);
- }
- b.write();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement