Перевод чисел из одной системы счисления в другую - C (СИ) (69889)

Формулировка задачи:

Задание: Написать программу на языке С для перевода числа, представленного в системе счисления с основанием S, в системы счисления с основаниями P, Q, R. Обеспечить корректность ввода числа в системе счисления с основанием S. Перевод чисел реализовать с применением функций. (Разработайте функцию для перевода числа из системы счисления с основанием S в систему счисления с основанием P, а затем, функции для перевода из P в Q и из P в R.) Не использовать стандартных возможностей по вводу/выводу чисел представленных в 2-ой, 8-ой, 16-ой системах счисления. Для представления цифр больших 9 использовать заглавные буквы латинского алфавита. S=13 P=10 Q=8 R=14 Помогите составить программу, я в программировании только начинающий. Есть код на C++, может кому то поможет:
#include "stdafx.h"
 
#include <iostream>
#include <string>
#include <cmath>
#include <algorithm>
 
using namespace std;
 
char model[14] = {'0', '1','2','3','4','5','6','7','8','9','A', 'B', 'C', 'D'};
 
int conversion_to_int (string s)
{
    double result = 0;
    int digits = s.length();
    double razr;
    double osn = 13;
    for ( int i = digits; i>0; i--)
        {
        for (int b = 0; b <= 13; b++)
        {
            if (s[digits-i] == model [b])
            {
                razr = b;
                break;
            }
            if (b == 13)
            {
            cout << "ВВЕДЕНО НЕКОРРЕКТНОЕ ЗНАЧЕНИЕ!!!!" << endl;
            cout << "Расчёт ведется для значения 0" << endl;
            return 0;
            }
        }
        result = result + razr*pow(osn,i-1);
       
    }
    return (int) result;
}
string conversion_to_other (int digit, int num) // digit - основание, num - число
{
    string number;
    int ostatok;
    while (num > digit)
    {
    ostatok = num%digit;
    number = number + model [ostatok];
    num = num/digit;
    }
    number = number + model [num];
    reverse(number.begin(),number.end());
    return number;
 
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    string s;
    int result;
    setlocale(LC_CTYPE, "rus");
    cout << "Введите число с основанием системы исчисления 13" << endl;
    cout << "Используйте только цифры и заглавные латинские буквы" << endl;
    for (int i = 0; i<13; i++)
    {
        cout << model [i] << " ";
 
    }
    cout << endl << endl;
    cin >> s;
    result = conversion_to_int (s);
    cout << endl<< "Ваше число:"<<endl<<endl;
    cout << "по основанию 8 " << '\t'<< '\t'<< conversion_to_other (8, result) << endl;
    cout << "по основанию 10 " << '\t'<< conversion_to_other (10, result) << endl;
    cout << "по основанию 14 " << '\t'<< conversion_to_other (14, result) << endl;
    getchar();
    getchar();
   
}

Код к задаче: «Перевод чисел из одной системы счисления в другую - C (СИ) (69889)»

textual
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
 
char *Scale="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
 
int dig2int(char d)
{
    int i;
    for (i=0; i<36; i++) if (Scale[i]==d) return i;
}
 
char  *convert(char *n, int from, int to)
{
      int i,j,l,p,k;
      char *buf;
      l=strlen(n);
      p=0;
      for (i=0; i<l; i++) p=p*from+dig2int(n[i]);
      buf=(char *) calloc(100,1);
      k=99;
      l=0;
      while (1)
      {
         j=p%to;
         buf[k--]=Scale[j];
         l++;
         p=p/to;
         if (p==0) break;
      }  
      j=0;
      k++;
      while (1)
      {
         buf[j++]=buf[k++];
         if (k == 100) break;
      }          
      buf=(char *) realloc(buf,(l+1));
      return buf;
}
int main(int argc, char *argv[])
{
 
  char *P="20";
  char *Q;
 
  char *P1="12A";
  char *Q1;
 
  Q=convert(P,10,16);
  printf("%s \n",Q);
 
  Q1=convert(P1,13,2);
  printf("%s \n",Q1);
 
  free(Q);
  free(Q1);
 
  system("PAUSE"); 
  return 0;
 
}

14   голосов, оценка 4.071 из 5


СОХРАНИТЬ ССЫЛКУ