#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;
}
}