Advertisement
Glenpl

multiplique strings

Mar 7th, 2015
280
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.14 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4.  
  5. string adding(string, string);
  6. string multiplique(string, string);
  7. string subtracting(string, string);
  8. string remove_zeroes(string);
  9. string str_reverse(string);
  10.  
  11. string str_reverse(string a)
  12. {
  13.     string b;
  14.     for(int i = a.length()-1; i >= 0; i--)
  15.         b += a[i];
  16.     return  b;
  17. }
  18.  
  19. string remove_zeroes(string a)
  20. {
  21.     string b;
  22.     int length = a.length();
  23.     int n_zero_pos = length;
  24.     for(int i = 0; i < length; i++)
  25.         if(a[i] != '0')
  26.         {
  27.             n_zero_pos = i;
  28.             break;
  29.         }
  30.     if(n_zero_pos == length) return "0";
  31.  
  32.     for(int i = n_zero_pos; i < length; i++)
  33.         b += a[i];
  34.     return b;
  35. }
  36.  
  37. int main()
  38. {
  39.     cout << multiplique("62345674563456745674356788456734567834567845678456783456734567834567345673456784567", "96545") << endl;
  40.     return 0;
  41.  
  42. }
  43.  
  44. string adding(string a, string b)
  45. {
  46.     int length = max(a.length(), b.length());
  47.     a = str_reverse(a);
  48.     b = str_reverse(b);
  49.     if(a.length() != b.length())
  50.         ((a.length() > b.length()) ? (b) : (a)).resize(length, '0');
  51.     string c;
  52.     c.resize(length + 1);
  53.  
  54.     for(int i = 0; i < length; i++)
  55.         c[i] = a[i] - '0' + b[i];
  56.  
  57.     for(int i = 0; i < length; i++)
  58.         if(c[i] > '9')
  59.         {
  60.             c[i] -= 10;
  61.             c[i+1]++;
  62.         }
  63.     c[length] += '0';
  64.     return remove_zeroes(str_reverse(c));
  65. }
  66.  
  67. string subtracting(string a, string b)
  68. {
  69.     int length = max(a.length(), b.length());
  70.     a = str_reverse(a);
  71.     b = str_reverse(b);
  72.     if(a.length() != b.length())
  73.         ((a.length() > b.length()) ? (b) : (a)).resize(length, '0');
  74.     string c;
  75.     c.resize(length);
  76.  
  77.     for(int i = 0; i < length; i++)
  78.         c[i] = a[i] + '0' - b[i];
  79.  
  80.     for(int i = 0; i < length; i++)
  81.         if(c[i] < '0')
  82.         {
  83.             c[i] += 10;
  84.             c[i+1]--;
  85.         }
  86.     return remove_zeroes(str_reverse(c));
  87. }
  88.  
  89. string multiplique(string a, string b)
  90. {
  91.     string w = a;
  92.     while(subtracting(b, "1") != "0")
  93.     {
  94.         b = subtracting(b, "1");
  95.         w = adding(w, a);
  96.     }
  97.     return w;
  98. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement