10进制转2进制三种方法 +任意进制的相互转化(利用字符)

#include<stdio.h>

int transfer(int x); //拆分二进制111为三个1:111=100+10+1 
void  MyBinary(int number); //递归 
void MyBinary2(int number); //借用数组 

int main()
{
    //进制转换函数的声明
    
    int x;
    printf("请输入一个十进制数:");
    scanf("%d",&x);
	printf("转换成二进制数是:%d\n",transfer(x));
//	printf("转换成二进制数是: \n");
//	MyBinary2(x);

}
/* transfer例子 
x=7 111 111=1+1*10+1*100 
yushu=7%2=1  y1=y0+yushu*p1=0+1*1=1   p1=p0*10=1*10=10  x=7/2=3       
yushu=3%2=1  y2=y1+yushu*p10=1+1*10=11   p2=p1*10=10*10=100  x=3/2=1    
	y3=y2+x*p=11+1*100=111   */

int transfer(int x)
{
    int p=1,y=0,yushu;
    while(x)
    {
        yushu = x%2;
        y = y + yushu*p;  //二进制三个1 利用十进制加法变成 111 
        p = p * 10;
        x = x / 2;
    }
    return y;
}

void  MyBinary(int number){
	if(number){
		MyBinary(number/2);
		printf("%d ",number%2);
	}

} 
void MyBinary2(int number) //转化为二进制 
{
	int a[10],i,j;
	i=0;
	while(number){
		if(number%2 == 0)
			a[i] = 0;
		else 
			a[i] = 1;
		number = number/2;
		printf("number = %d \n",number);
		i++;
	}
	for(j = i-1;j >= 0;j--) //逆序输出数组a 
		printf("%d ",a[j]);
} 

任意进制转换
原文:https://blog.csdn.net/qq_36454961/article/details/79174645

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int TenNum(char a[],int B);              //将输入的数字转换成10进制数
void Numchange(int m, int B);            //将转换好了的10进制数转换为所需进制数

int TenNum(char a[], int B)
{
	int len, i, num;
	int sum = 0;     
	len = strlen(a);                    //求得字符串长度
	for (i = 0; i < len; i++)
	{
		printf("a[%d]=%d\n",i,a[i]-'0');
		if (a[i] >= '0' && a[i] <= '9')
			num = a[i] - '0';          // -'0'的作用 字符型转为整型 
		else if (a[i] >= 'A' && a[i] <= 'F')  //A-F表示 10-15 
			num = a[i] - 'A' + 10; 
		sum = sum * B + num;     //sum = sum*2+a[i] , a[i]=101011  a[i]相当于短除法对应的余数
		printf("sum=%d\n",sum); 
	}
	return sum;
}
void Numchange(int m, int B) //递归法 进制转化 
{
	int n;
	if (m)
	{
		Numchange(m / B, B);
		n = m % B;
		if (n < 10)
			printf("%d", n);           //小于10直接输出
		else
			printf("%c", n + 55);      //大于10转换成字符输出 如 10转为字符 A(ASCII码值为65) 
	}
}
int main()
{
	int B, b;
	char a[20];       
	printf("请输入待转换数的进制(2-16):");
	do {
		scanf("%d", &B);         
	} while (B < 2 && B > 16);
	printf("请输入待转换数:");
	getchar();         
	gets(a);                        //将输入的n进制数存放在数组a中 
	int m = TenNum(a, B);             //将输入的数字转换成十进制数
	printf("请输入需要转成几进制数(2-16):");
	do {
		scanf("%d", &b);
	} while (B < 2 && B > 16);
	printf("%d进制数%s转换为%d进制数的结果为:",B,a,b);
	Numchange(m, b);                 //将十进制数转换为所需进制数
	printf("\n");
	system("pause");
	return 0;
}
}
原创文章 36 获赞 8 访问量 2760

猜你喜欢

转载自blog.csdn.net/qq_41398619/article/details/105591393