Перевод Из Одной Системы Счисленяи В Другую

Тема в разделе "C/C++/C#", создана пользователем mike701, 9 окт 2011.

Статус темы:
Закрыта.
  1. mike701

    mike701 Гость

    Ребят, задание: перевести из двоичной системы в десятичную, восьмеричную и шестнадцатеричную
    Во все переводит нормально, кроме шестнадцатеричной. на конце всегда ставит лишнюю цифру, причем я не понимаю, по какому принципу, кто подскажет, как от этого избавиться?
    Вот код программы:

    #include <stdio.h>
    #include <conio.h>
    #include <string.h>
    #include <math.h>


    int bin2dec(char* st)
    {
    int i,r,n=strlen(st);
    for (i=r=0;i<n;i++)
    {
    r<<=1;
    r+=st-'0';
    }
    return ®;
    }
    int bin2oct(char* st)
    {
    int i,r,c,x,n=strlen(st);
    float k=0;
    c=0;
    for (i=r=0;i<n;i++)
    {
    r<<=1;
    r+=st-'0';
    }
    while ((r+7)/8!=0)
    {
    k*=0.1;
    k+=r%8;
    r/=8;
    c=c+1;
    }
    while (c>1)
    {
    k*=10;
    c=c-1;
    }


    return (k);
    }

    int bin2hex(char* st)
    {
    int i,r,x,f,b,n=strlen(st);
    char a[100];
    x=1;
    for (i=r=0;i<n;i++)
    {
    r<<=1;
    r+=st-'0';
    }
    i=0;
    while (x<=r)
    {
    i++;
    x*=16;
    }
    f=b=0;
    while (i>0)
    {
    b=16*r/x;
    x/=16;
    if (b>=0 && b<=9) a[f]=b+'0';
    if (b>=10) a[f]=b+'a'-10;
    f++;
    i--;
    r-=b*x;
    }
    i=0;
    while (i<f)
    {
    printf ("%c",a);
    i++;
    }

    }

    int main()
    {
    char s[30];
    int i,k=0,n;
    printf("vvedite_dvoichnoe_chislo");
    scanf("%s",s);
    n=strlen(s);
    for (i=0;i<n;i++)
    {
    if (s<'0' || s>'1')
    {
    k++;
    break;
    }
    }
    if (k==0)
    {

    printf("%d , sistema s osnovaniem 10\n", bin2dec(s));
    printf("%d , sistema s osnovaniem 8\n", bin2oct(s));
    printf("%d , sistema s osnovaniem 16\n", bin2hex(s));
    getch ();
    }
    else
    {
    printf ("Ne dvoichnoe chislo");
    getch();
    }
    return 0;
    }

    заранее спасибо
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей