c语言实现进制转换

c语言义实现进制转换

c语言义实现进制转换

#include “stdio.h”
#include “string.h”
#include “conio.h”
#include “stdlib.h”
#include “math.h”
#include
using namespace std;
int sel;//选择进制转换
char zhs[50]={0},xs[50]={0};
char str[50],str1[50],str2[50];
void Menu()
{
printf(“\n");
printf(" 1.十进制转换为二进制 \n");
printf(" 2.二进制转换为十进制 \n");
printf(" 3.二进制转换为十六进制 \n");
printf(" 4.十六进制转换为二进制 \n");
printf(" 5.十六进制转换为十进制 \n");
printf(" 6.十进制转换为十六进制 \n");
printf(" 7.退出 \n");
printf("
\n”);
printf(" 请输入需要转换的类型数字: \n");
getchar();
}
long T2T(char str[])//十进制转换为二进制
{
int i,j,k;
long temp;
char a[50],b[50];
double t2;

for(i=0;str[i]!=’.’&&str[i]!=0;i++)
a[i]=str[i];
a[i]=0;
k=i;
if(str[k]==’.’)
{
b[0]=‘0’;b[1]=’.’;
for(j=2,i=i+1;str[i];i++,j++)
b[j]=str[i];
b[j]=0;
}//分离

temp=atol(a);
for(j=0;temp!=0;j++)
{
zhs[j]=temp%2+‘0’;
temp/=2;
}
zhs[j]=0;//转换整数部分
if(str[k]==’.’)
{
t2=atof(b);
for(j=0;t2!=0&&j<=6;j++)
{
t2*=2;
if(t2>=1) {t2-=1;xs[j]=‘1’;}
else
xs[j]=‘0’;
}
xs[j]=0;
}
return 0;

}

char B2H4bit(string s)
{
char ret=‘0’;
if(s==“0000”) ret=‘0’;
else if(s==“0001”) ret=‘1’;
else if(s==“0010”) ret=‘2’;
else if(s==“0011”) ret=‘3’;
else if(s==“0100”) ret=‘4’;
else if(s==“0101”) ret=‘5’;
else if(s==“0110”) ret=‘6’;
else if(s==“0111”) ret=‘7’;
else if(s==“1000”) ret=‘8’;
else if(s==“1001”) ret=‘9’;
else if(s==“1010”) ret=‘A’;
else if(s==“1011”) ret=‘B’;
else if(s==“1100”) ret=‘C’;
else if(s==“1101”) ret=‘D’;
else if(s==“1110”) ret=‘E’;
else if(s==“1111”) ret=‘F’;
else printf(" input error !\n");
return ret;
}
string B2H(string s)
{
int len, zeronum;
len = s.length();
zeronum = len % 4;
zeronum = (4 - zeronum) % 4;//每4个数为一组

while (zeronum)//补0
{
	s = "0" + s;
	zeronum--;
}

int num = s.length() / 4;
string ret = "";
for (int i = 0; i<num; i++)
{
	string sPre = s.substr(0, 4);
	s = s.substr(4, s.length() - 4);
	ret += B2H4bit(sPre);
}
return ret;

}
string H2B4bit(char ret)
{
string s;
if (ret == ‘0’) s = “0000”;
else if (ret == ‘1’) s = “0001”;
else if (ret == ‘2’) s = “0010”;
else if (ret == ‘3’) s = “0011”;
else if (ret == ‘4’) s = “0100”;
else if (ret == ‘5’) s = “0101”;
else if (ret == ‘6’) s = “0110”;
else if (ret == ‘7’) s = “0111”;
else if (ret == ‘8’) s = “1000”;
else if (ret == ‘9’) s = “1001”;
else if (ret == ‘A’) s = “1010”;
else if (ret == ‘B’) s = “1011”;
else if (ret == ‘C’) s = “1100”;
else if (ret == ‘D’) s = “1101”;
else if (ret == ‘E’) s = “1110”;
else if (ret == ‘F’) s = “1111”;
else printf(“input error!\n”);
return s;
}
string H2B(string s)
{
string s1 = “”;
int i;
for (i = 0; i<strlen(str); i++)
{
s1 = s1 + H2B4bit(str[i]);
}
return s1;
}
long H2D(char str[])
{
int len=0,i=0,z=0;
string s3=H2B(str);
char str2[50];
strcpy(str2,s3.c_str());
len=strlen(str2);
int k;
k=len-1;
for(i=0;str2[i]!=’\0’;i++)
{ z+=pow(2,k)*((int)str2[i]-48);
k–; }
return z;

}
string D2H(char str[])
{
T2T(str);
int len;
len = strlen(zhs);
int i=0, j=0;
char a[50] = {0};
for (i=len-1,j=0;i>=0;i–)
{
a[j]=zhs[i];
j++;
}
string s1=a;
return B2H(s1);

}

int main()
{
int i,len,exit=0;
while(1)
{
Menu();
sel=getch();
system(“cls”);
if(sel==‘1’)

	  while(1)
	  {
	  printf("请输入需要转换的十进制数:\n");
	  scanf("%s",str);
	  T2T(str);
      len=strlen(zhs);
      printf("     转换成的二进制数为:");
	   for(i=len-1;i>=0;i--)
	   {  printf("%c",zhs[i]);}
	   if(!len) {printf("0");}
	   len=strlen(xs);
	   (len==0)?printf("\n"):printf(".");
       if(len)
		  {
		      printf("%s\n\n",xs);
		   }
            printf("====================================\n");
			printf("1.继续转换\n2.返回主菜单\n");
			printf("====================================\n");
			sel = _getch();
			if (sel == '2') break;
			system("cls");
		
	  }
        
	  else if(sel=='2')
		  while(1)
		  {
			  printf("输入您要转换的二进制数: \n");
			  scanf("%s",str);
			  double z=0;
              int len=0;
              int i=0;
              scanf("%s",str);
              len=strlen(str);
              int k;
              k=len-1;
              for(i=0;str[i]!='\0';i++)
			  { z+=pow(2,k)*((int)str[i]-48);
                 k--;
			  }
               printf("转换为十进制数为: \n");
               printf("%.0lf\n",z);
            printf("====================================\n");
			printf("1.继续转换\n2.返回主菜单\n");
			printf("====================================\n");
			sel = _getch();
			if (sel == '2') break;
			system("cls");
		  }
	   else if(sel=='3')
		 while(1)
		 {
			printf("     请输入您要转化的二进制:");
			scanf("%s", &str, sizeof(str));
			string s = str;
			printf("     转换成的十六进制数为:");
			string s1 = B2H(s);
			printf("%s\n", s1.data());
			printf("====================================\n");
			printf("1.继续转换\n2.返回主菜单\n");
			printf("====================================\n");
			sel = _getch();
			if (sel == '2') break;
			system("cls");

}
else if(sel==‘4’)
while(1)
{
printf(“请输入您需要转化的十六进制数:\n”);
scanf("%s", &str, sizeof(str));
printf(" 转换成的二进制数为:");
string s2 = H2B(str);
printf("%s\n", s2.data());
printf("\n");
printf(“1.继续转换\n2.返回主菜单\n”);
printf("
\n");
sel = _getch();
if (sel == ‘2’) break;
system(“cls”);
}
else if(sel==‘5’)
while(1)
{
printf(“请输入您需要转化的十六进制数:\n”);
scanf("%s", &str, sizeof(str));
printf(" 转换成的十进制数为:");
printf("%ld\n", H2D(str));
printf("\n");
printf(“1.继续转换\n2.返回主菜单\n”);
printf("
\n");
sel = _getch();
if (sel == ‘2’) break;
system(“cls”);
}
else if(sel==‘6’)
while(1)
{
printf(“请输入您需要转化的十进制数:\n”);
scanf("%s", &str, sizeof(str));
printf(" 转换成的十六进制数为:");
printf("%ld\n", D2H(str));
printf("\n");
printf(“1.继续转换\n2.返回主菜单\n”);
printf("
\n");
sel = _getch();
if (sel == ‘2’) break;
system(“cls”);
}
else if(sel==‘7’) return 0;
system(“cls”);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值