C语言实现进制转换---二进制、八进制、十进制、十六进制。可直接运行
程序员文章站
2022-07-15 10:54:52
...
C语言实现简单的进制转换,没有使用什么算法
#include <stdio.h>
#include<string.h>
//将十六进制数转换为十进制数
int Translate16To10(char s[])
{
int p = 0,i;
int n = 1;
int ans=0;
for ( i = strlen(s) - 1; i >= 0; i--)
{
if (s[i] >= 'A'&&s[i] <= 'F')
p = s[i] - 'A' + 10;
else
p = s[i] - '0';
ans += p * n;
n *= 16;
}
return ans;
}
//将十进制数转化为十六进制数
int Translate10To16(int n,char s[])
{
int i=0;
int p;
do
{
p=n%16;
n/=16;
if(p<=9)
{
s[i++]='0'+p;
}
else
s[i++]='A'+(p-10);
}while(n!=0);
return i;
}
//将十进制数转换为S进制数
int Translate10ToX(int n,int a[],int jz)
{
int i = 0;
do
{
a[i++] = n % jz;
n /= jz;
} while (n != 0);
return i;
}
//将X进制数转换为十进制
int TranslateXto10(int n,int X)
{
int mi=1;
int sum=0,p=0;
while(n!=0)
{
p=n%10;
n/=10;
sum+=p*mi;
mi*=X;
}
return sum;
}
//十六进制转换其他进制
void SixteenToOthers(int jz)
{
char str[20];
int ans[100];
int i;
scanf("%s", str);
int temp = Translate16To10(str);
int len=Translate10ToX(temp, ans,jz);
printf("转换结果为:\n");
for ( i = len - 1; i >= 0; i--)
printf("%d", ans[i]);
}
//其他进制转换到十六进制
void OthersToSixteen(int jz)
{
int n,i;
char ans[20];
scanf("%d",&n);
int temp=TranslateXto10(n,jz);
int count=Translate10To16(temp,ans);
printf("转换结果为:\n");
for(i=count-1;i>=0;i--)
{
printf("%c",ans[i]);
}
}
//除了关于十六进制的普通转换
void FormalTrans(int jza,int jzb)
{
int n,i;
int a[20];
scanf("%d",&n);
int temp10jz=TranslateXto10(n,jza);
int count = Translate10ToX(temp10jz,a,jzb);
for(i=count-1;i>=0;i--)
{
printf("%d",a[i]);
}
}
int main()
{
int jza, jzb;
while(1)
{
printf("你想完成从几进制到几进制的转换?(例如十进制到八进制输入:10 8,支持二进制、八进制、十进制、十六进制之间的转换)\n");
scanf("%d %d", &jza, &jzb);
printf("请输入你想想转换的%d进制数:",jza);
if (jza == 16)
{
SixteenToOthers(jzb);
}
if(jzb==16)
{
OthersToSixteen(jza);
}
else
FormalTrans(jza,jzb);
}
return 0;
}