题目描述
使用C语言编写十进制,二进制,八进制,十六进制之间的相互转换
#include<stdio.h>
#include<math.h>
void shi_er(int a)
{
int temp;int i=0;
int arr[20];
do
{
temp=a%2;
a=a/2;
arr[i++]=temp;
}
while (a!=0);
printf("十进制转换成二进制结果为:");
for (int j = i-1; j>=0; j--)
printf("%d",arr[j]);
}
int er_shi()
{
int n;
printf("请输入二进制数长度\n");
scanf("%d",&n);
printf("请输入二进制数\n");
getchar();
int a=0;
for(a=0;n>0;n--)
{
a*=2;
a+=getchar()-'0';
}
return a;
}
void er_ba()
{
int a=er_shi();
printf("二进制转换成八进制结果为:%o",a);
}
void er_shiliu()
{
int a=er_shi();
printf("二进制转换成十六进制结果为:%x",a);
}
int ba_shi()
{
int i=0,n,tmp,sum=0;
printf("请输入八进制数\n");
scanf("%d",&n);
while(n)
{
tmp=n%10;
n=n/10;
sum+=tmp*pow(8,i);
i++;
}
return sum;
}
void ba_shiliu()
{
printf("八进制转换成十六进制结果为:%x",ba_shi());
}
void shiliu_ba()
{
int m;
char s[50];
printf("请输入16进制数:");
scanf("%s",s);
int i,t;
long sum =0;
for(i=0;s[i];i++)
{
if(s[i]>='0'&&s[i]<='9')
t=s[i]-'0';
if(s[i]>='a'&&s[i]<='z')
t=s[i]-'a'+10;
if(s[i]>='A'&&s[i]<='Z')
t=s[i]-'A'+10;
sum=sum*16+t;
}
printf("十六进制转换成八进制结果为:%o",sum);
}
int main()
{
printf("请输入需要转换成什么进制\n");
printf("1.十进制转换成二进制\n");
printf("2.十进制转换成八进制\n");
printf("3.十进制转换成十六进制\n");
printf("4.二进制转换成八进制\n");
printf("5.二进制转换成十六进制\n");
printf("6.八进制转换成十六进制\n");
printf("7.十六进制转换成八进制\n");
int n;
scanf("%d",&n);
switch(n)
{
case 1:
{
printf("请输入一个十进制数\n");
int a;
scanf("%d",&a);
shi_er(a);
break;
}
case 2:
{
printf("请输入一个十进制数\n");
int a;
scanf("%d",&a);
printf("十进制转换成八进制结果为:%o",a);
break;
}
case 3:
{
printf("请输入一个十进制数\n");
int a;
scanf("%d",&a);
printf("十进制转换成十六进制结果为:%x",a);
break;
}
case 4:
er_ba();
break;
case 5:
er_shiliu();
break;
case 6:
ba_shiliu();
break;
case 7:
shiliu_ba();
break;
}
return 0;
}