Advertisement
Steph64

Калькулятор 2.0

Dec 10th, 2018
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.91 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <string>
  4.  
  5. using namespace std;
  6.  
  7. int pow(int number, int index) {//Возведение в степень(число, степень)
  8.     int new_number = 1;                         //новое число
  9.     for (int i = 0; i < index; i++)             //проходя по циклу каждый раз умножаем новое число на число
  10.         new_number *= number;
  11.     return new_number;
  12. }
  13.  
  14. void ten(char *num, int base, int size) {//перевод из 10 в остальные(число, система счисления)
  15.  
  16.     vector<int> new_num;
  17.     for(int i=0; i<size; i++){
  18.        
  19.     }
  20.     /*while (num) {
  21.         int m = num % base;                 //делим на систему(получаем остаток)
  22.         new_num.push_back(m);               //добавляем остаток
  23.         num /= base;                        //сдвигаем на одно число
  24.     }*/
  25.     for (int i = new_num.size() - 1; i >= 0; i--) { //разворачиваем
  26.         char digit;
  27.         if (new_num[i] < 10) digit = '0' + new_num[i];//вывод в цифру
  28.         else digit = 'A' + new_num[i] - 10;         //вывод в букву
  29.         cout << digit;
  30.     }
  31.     cout << endl;
  32. }
  33. void other(char *number, int p, int size)//перевод если основание от 2 до 35(число, система куда надо перевест, длина числа)
  34. {
  35.     int new_num = 0;    //новое число
  36.     bool flag = true;   //нет ли лишних чисел
  37.     for (int i = size; i > 0; i--){//идем с конца в начало
  38.         int k = p - 11; //количество букв в числе
  39.         int o = p - 1;  //количество цифр в числе
  40.  
  41.         if ((int)number[size - i] >= 'A' && (int)number[size - i] <= ('A'+k)){//если это буква
  42.             //то переводим ее в число(например А->10) умножаем на систему в степени и прибавляем к тому что было
  43.             new_num += ((int)number[size - i] - 55)*pow(p, i-1);
  44.         }
  45.         else if ((int)number[size-i] >= '0' && (int)number[size-i] <= ('0'+o)){//если это цифра
  46.                 //то переводим ее в число(например "0"->0) умножаем на систему в степени и прибавляем к тому что было
  47.                 new_num += ((int)number[size-i] - 48)*pow(p, i-1);
  48.             }
  49.             else flag = false;
  50.     }
  51.     if (flag) cout << new_num;
  52.     else cout<< "Incorrect value" << endl << endl;
  53. }
  54.  
  55. int main()
  56. {
  57.     cout << "Hello, what would you want to do?" << endl;
  58.     cout << "You can change base(n[2:36]):" << endl << "from 10 to n" << endl << "or" << endl << "from n to 10" << endl;
  59.  
  60.     cout << "Input base number sustem: ";
  61.     int p;
  62.     cin >> p;                           //получаем исходную систему счисления
  63.  
  64.     cout << "Input number: ";
  65.  
  66.     string n;                                       //считываем число
  67.     cin >> n;
  68.     const int size = n.length();                    //находим длину числа
  69.        
  70.     char *char_array = new char[size];
  71.     for (int i = 0; i < size; i++)
  72.         char_array[i] = n[i];
  73.            
  74.     cout << "Input preferable base system" << endl;   //система куда переводим
  75.     int m;
  76.     cin>>m;
  77.     cout << "-----------" << endl;
  78.        
  79.     if (p == 10)  
  80.         ten(char_array, m, size);                      //10->p
  81.     else if ((p > 1 && p < 10) || (p > 10 && p <= 36))
  82.         other(char_array, p, size);  //10->p
  83.         else cout << "I`m sorry, but my creator is kinda silly girl so she has no idea how should it works or even be possible" << endl << endl;
  84.     delete[]char_array;
  85.     return 0;
  86. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement