Основы преобразования языка C - PullRequest
0 голосов
/ 24 ноября 2018

Мне нужна программа, которая: может конвертировать любое число в определенной базе и конвертировать его в другую базу.Он должен работать для действительных чисел (например, 7,34, 3,14 и т.для действительных чисел.

#include <stdio.h>
#include <string.h>
char reVal(int num)
{
    if (num >= 0 && num <= 9)
        return (char)(num + '0');
    else
        return (char)(num - 10 + 'A');
}


void strev(char *str)
{
    int len = strlen(str);
    int i;
    for (i = 0; i < len/2; i++)
    {
        char temp = str[i];
        str[i] = str[len-i-1];
        str[len-i-1] = temp;
    }
}


char* fromDeci(char res[], int base, int inputNum)
{
    int index = 0;


    while (inputNum > 0)
    {
        res[index++] = reVal(inputNum % base);
        inputNum /= base;
    }
    res[index] = '\0';


    strev(res);

    return res;
}


int main()
{
    int inputNum = 10, base = 3;
    char res[100];
    printf("Equivalent of %d in base %d is "
           " %s\n", inputNum, base, fromDeci(res, base, inputNum));
    return 0;
}

#include <stdlib.h>
#include <stdio.h>
int b,c,x,nr,nr2;
char z;

int main()
{
    int num,i,l,b,a[50];
    l=0;
printf("introduce the number and its base\n");
scanf("%d",&num);
scanf("%d",&b);
  int n;
i=0;
n=num;
l=0;
while (n!=0)
   {
       l++;
       n/=10;
   }
   n=num;
   i=l;
   while (n!=0)
   {
       a[i]= n%10;
       n/=10;
       i--;
   }
   i=0;
while(i<=l)
    {
x=x*b+a[i];
i++;
    }
    printf("\n%d",x);
return 0;
}

Ответы [ 2 ]

0 голосов
/ 24 ноября 2018

Наша система счисления называется base 10 с позиционным обозначением .Это означает, что число 123 означает 1*10^2 + 2*10^1 + 3*10^0 = 100 + 20 +3.Вы можете адаптировать это для любой базы.

Вам нужны цифры, которые покрывают вашу базу, поэтому база 36 означает цифры 0..9, a..z (36 цифр), а затем адаптируйте приведенную выше формулу.

Формула будет более общей: a*base^n + b*base^(n-1) + ... q*base^0, с n количеством цифр в числе.

Для плавающей запятой она работает так же, но после десятичной запятой вы получаете отрицательные показатели.

Для преобразования из любой базы в другую, сначала выполните преобразование в общую базу, а затем в базу «в».

0 голосов
/ 24 ноября 2018

Прежде всего, поскольку вы берете действительные числа, вам необходимо изменить тип числа.Это должно быть "float num";

и если вы хотите преобразовать 3,14 из десятичного в двоичное, то вам нужно разбить его на две части: одну - 3, а другую - 0,14, затем преобразовать эти две отдельно в базу, которая вам нравится, и затем добавить ихвверх.

См. Это

надеюсь, это поможет

...