#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void convertto2(int num);//函数声明
void convertto8(int num);
void convertto16(int num);
int convert2to10(char *s);
int convert8to10(char *s);
int convert16to10(char *s);
int main(int argc,char **argv)
{
int type;
int sum;
int num;
char s[50];
char choice='NULL';
again:
printf("1 二进制\n");
printf("2 八进制\n");
printf("3 十进制\n");
printf("4 十六进制\n");
printf("请选择数的进制类型:\n");
scanf(" %d",&type);
switch(type)
{
case 1:
printf("请输入数值:");
scanf(" %s",s);
sum=convert2to10(s);
printf("->十进制:%d",sum);
printf("\n->八进制:");
convertto8(sum);
printf("\n->十六进制:");
convertto16(sum);
break;
case 2:
printf("请输入数值:");
scanf(" %s",s);
sum=convert8to10(s);
printf("->二进制:");
convertto2(sum);
printf("\n->十进制:%d",sum);
printf("\n->十六进制:");
convertto16(sum);
break;
case 3:
printf("请输入数值:");
scanf(" %d",&num);
printf("->二进制:");
convertto2(num);
printf("\n->八进制:");
convertto8(num);
printf("\n->十六进制:");
convertto16(num);
break;
case 4:
printf("请输入数值:");
scanf(" %s",s);
sum=convert16to10(s);
printf("->二进制:");
convertto2(sum);
printf("\n->八进制:");
convertto8(sum);
printf("\n->十进制:%d",sum);
}
printf("\n是否继续(y/n):");
scanf(" %c",&choice);
if(choice=='n')
{return 0;}
else
{goto again;}
return 0;
}
void convertto2(int num)//十进制转二进制
{
if (num ==1|| num==0)
{
printf("%d",num);
}
else
{
int n=num / 2;
convertto2(n);
printf("%d",num %2);
}
}
void convertto8(int num)//十进制转八进制
{
if (num < 8)
{
printf("%d", num);
}
else
{
int n = num / 8;
convertto8(n);
printf("%d", num % 8);
}
}
void convertto16(int num)//十进制转十六进制
{
if (num<16)
{
switch (num)
{
case 10:
printf("%c", 'a');
break;
case 11:
printf("%c", 'b');
break;
case 12:
printf("%c", 'c');
break;
case 13:
printf("%c", 'd');
break;
case 14:
printf("%c", 'e');
break;
case 15:
printf("%c", 'f');
break;
default:
printf("%d", num);
break;
}
}
else
{
int n = num / 16;
convertto16(n);
num = num % 16;
switch (num)
{
case 10:
printf("%c", 'a'); break;
case 11:
printf("%c", 'b'); break;
case 12:
printf("%c", 'c'); break;
case 13:
printf("%c", 'd'); break;
case 14:
printf("%c", 'e'); break;
case 15:
printf("%c", 'f'); break;
default:
printf("%d", num); break;
}
}
}
int convert2to10(char *s)//二进制转十进制
{
int i,sum=0;
int m=strlen(s);
for(i=0;i<m;i++)
{
if(s[i]=='0')
{
sum=sum*2+0;
}
else if(s[i]=='1')
{
sum=sum*2+1;
}
}
return sum;
}
int convert8to10(char *s)//八进制转十进制
{
int i,t,sum=0;
int m=strlen(s);
for(i=0;i<m;i++)
{
t=s[i]-'0';
sum=sum*8+t;
}
return sum;
}
int convert16to10(char *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;
}
return sum;
}
进制转换
最新推荐文章于 2023-03-20 10:26:34 发布