Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <vector>
- class BinPow{
- private:
- unsigned int numOfPow;
- std::vector<unsigned int> number;
- std::vector<unsigned int> rez;
- std::vector<unsigned int> result;
- public:
- BinPow(std::string numb,int sick);
- void PrintIt(std::vector<unsigned int> &a);
- std::vector<unsigned int> MultiIt(std::vector<unsigned int> a, std::vector<unsigned int> b);
- std::vector<unsigned int> PowIt(int pow);
- };
- BinPow::BinPow(std::string numb, int sick){
- number.resize(numb.length());
- for (int i = 0; i < numb.length(); i++){
- number[i] = (int)numb[i] -48;
- }
- reverse(number.begin(), number.end());
- PrintIt(number);
- rez = MultiIt(number, number);
- PrintIt(rez);
- rez = PowIt(sick);
- PrintIt(rez);
- }
- void BinPow::PrintIt(std::vector<unsigned int> &a){
- for (int i = a.size() - 1; i >= 0; i--)
- std::cout << a[i];
- std::cout << std::endl;
- }
- std::vector<unsigned int> BinPow::MultiIt(std::vector<unsigned int> a, std::vector<unsigned int> b){
- std::vector<unsigned int> result;
- int osn = 10;
- int carry = 0;
- result.resize(a.size() + b.size());
- for (int i = 0; i < a.size(); i++){
- carry = 0;
- for (int j = 0; j < b.size() ; j++){
- result[i + j] += a[i] * b[j] + carry;
- carry = 0;
- if (result[i + j] >= osn){
- carry = result[i + j] / osn;
- result[i + j] -= carry * osn;
- }
- }
- for (int j = i + a.size(); carry > 0; j++){
- result[j] += carry;
- carry = 0;
- if (result[j] >= osn){
- carry = result[j] / osn;
- result[j] -= carry * osn;
- }
- }
- }
- return result;
- }
- std::vector<unsigned int> BinPow::PowIt(int pow){
- result.resize(0);
- result.push_back(1);
- if (pow == 0)
- return result;
- if (pow == 1)
- return number;
- int _pow = pow;
- int count = 0;
- while (_pow){
- if (_pow & 1){
- result = MultiIt(number, result);
- _pow--;
- }
- else{
- number = MultiIt(number, number);
- _pow >>= 1;
- }
- count++;
- }
- return result;
- }
- int main(){
- std::string numb = "4815162342";
- BinPow shit(numb,7);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment