ParanoidPanda

Untitled

Nov 10th, 2015
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.02 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <vector>
  4.  
  5. class BinPow{
  6. private:
  7. unsigned int numOfPow;
  8. std::vector<unsigned int> number;
  9. std::vector<unsigned int> rez;
  10. std::vector<unsigned int> result;
  11. public:
  12. BinPow(std::string numb,int sick);
  13. void PrintIt(std::vector<unsigned int> &a);
  14. std::vector<unsigned int> MultiIt(std::vector<unsigned int> a, std::vector<unsigned int> b);
  15. std::vector<unsigned int> PowIt(int pow);
  16. };
  17.  
  18. BinPow::BinPow(std::string numb, int sick){
  19. number.resize(numb.length());
  20. for (int i = 0; i < numb.length(); i++){
  21. number[i] = (int)numb[i] -48;
  22. }
  23. reverse(number.begin(), number.end());
  24. PrintIt(number);
  25. rez = MultiIt(number, number);
  26. PrintIt(rez);
  27. rez = PowIt(sick);
  28. PrintIt(rez);
  29. }
  30.  
  31. void BinPow::PrintIt(std::vector<unsigned int> &a){
  32. for (int i = a.size() - 1; i >= 0; i--)
  33. std::cout << a[i];
  34. std::cout << std::endl;
  35. }
  36.  
  37. std::vector<unsigned int> BinPow::MultiIt(std::vector<unsigned int> a, std::vector<unsigned int> b){
  38. std::vector<unsigned int> result;
  39. int osn = 10;
  40. int carry = 0;
  41. result.resize(a.size() + b.size());
  42. for (int i = 0; i < a.size(); i++){
  43. carry = 0;
  44. for (int j = 0; j < b.size() ; j++){
  45. result[i + j] += a[i] * b[j] + carry;
  46. carry = 0;
  47. if (result[i + j] >= osn){
  48. carry = result[i + j] / osn;
  49. result[i + j] -= carry * osn;
  50. }
  51. }
  52. for (int j = i + a.size(); carry > 0; j++){
  53. result[j] += carry;
  54. carry = 0;
  55. if (result[j] >= osn){
  56. carry = result[j] / osn;
  57. result[j] -= carry * osn;
  58. }
  59. }
  60. }
  61. return result;
  62. }
  63.  
  64. std::vector<unsigned int> BinPow::PowIt(int pow){
  65. result.resize(0);
  66. result.push_back(1);
  67. if (pow == 0)
  68. return result;
  69. if (pow == 1)
  70. return number;
  71. int _pow = pow;
  72. int count = 0;
  73. while (_pow){
  74. if (_pow & 1){
  75. result = MultiIt(number, result);
  76. _pow--;
  77. }
  78. else{
  79. number = MultiIt(number, number);
  80. _pow >>= 1;
  81. }
  82. count++;
  83. }
  84. return result;
  85. }
  86.  
  87. int main(){
  88. std::string numb = "4815162342";
  89. BinPow shit(numb,7);
  90. return 0;
  91. }
Advertisement
Add Comment
Please, Sign In to add comment