Advertisement
Korotkodul

Системы счисления. Перевод.

Nov 26th, 2021
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.87 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <cmath>
  4. #include <vector>
  5. #include <string>
  6. #include <cstdio>
  7. #include <algorithm>
  8. using namespace std;
  9.  
  10. bool less_10(char some){
  11.     if (some=='0'||some=='1'||some=='2'||some=='3'||some=='4'||some=='5'||some=='6'||some=='7'||some=='8'||some=='9'){
  12.         return true;
  13.     } else{
  14.         return false;
  15.     }
  16. }
  17.  
  18. int to_num(char a){
  19.     int res;
  20.     if (less_10(a)){
  21.         res = a - 48;
  22.     }else{
  23.         res =  a - 'A' + 10;
  24.     }
  25.     return res;
  26.     //cout<< res<<'\n';
  27. }
  28.  
  29. char to_char(int x){
  30.     char res;
  31.     if (x < 10){
  32.         res = x + 48;
  33.     }else{
  34.         res = x - 10 + 'A';
  35.     }
  36.     return res;
  37.     //cout<<res<<'\n';
  38. }
  39.  
  40.  
  41. string to_str(int x){
  42.     string res = to_string(x);
  43.     return res;
  44. }
  45.  
  46.  
  47.  
  48. int helper(string num, int from){
  49.     //1 -- перевести в десятичную
  50.     string ans = ""; // в конце перевернём эту строку
  51.     int sz = num.length();
  52.     int real = 0;
  53.     for(int i = 1; i <= sz; ++i){
  54.         char some = num[i-1]; //digit
  55.         int dig;
  56.         if (less_10(some)){
  57.             dig = some - '0';
  58.         }
  59.         else{
  60.             dig = to_num(some);
  61.         }
  62.         real += dig * pow(from, sz-i);
  63.     }
  64.     return real;
  65. }
  66. //2 -- перевести из десятичной в нужную систему
  67. string convert(int tenth, int to){
  68.     int num = tenth;
  69.     string S_num = to_string(num);
  70.     string ans = "";
  71.     while (num > 0){
  72.         char sym; //symbol
  73.         int dig =  num % to;
  74.         sym = to_char(dig);
  75.         ans += sym;
  76.         num /= to;
  77.     }
  78.     reverse(ans.begin(), ans.end());
  79.     return ans;
  80. }
  81.  
  82. int main()
  83. {
  84.     string num;
  85.     int to, from;
  86.     cin>>from>>num>>to;
  87.     int tenth = helper(num,from);
  88.     string result = convert(tenth, to);
  89.     cout<<result<<'\n';
  90. }
  91.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement