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

  • Автор темы mike701
  • Дата начала
Статус
Закрыто для дальнейших ответов.
M

mike701

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

#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;
}

заранее спасибо
 
Статус
Закрыто для дальнейших ответов.