分析:任意10进制转x进制有这样的方法,下面以39转2进制为例:
39/2=19……1
19/2=9……1
9/2=4……1
4/2=2……0
2/2=1……0
1/2=0……1
把余数倒过来写,得100111。即39的二进制为100111。
要求:给出一个x,返回其二进制的y.
思路:
1.将x/2求余,将余数逐个保留到数组t[]中。
2.x=x/2.
3.x不为0,循环,到第一步重新开始。
4.x为0,结束循环。将数组逆序输出。
代码:
#include "stdio.h"
void TenToTwo(int x) //八进制 的改一下就是了。
{
int t[50]; //保留结果
int tmp,i=-1,j;
while(x!=0)
{
//保留余数
tmp=x%2; //八进制除8
i++;t[i]=tmp;
//x除2
x=x/2; //八进制除8
}
//逆序输出数组
for(j=i;j>=0;j--)
{
printf("%1d",t[j]);
}
}
void main()
{
int x;
printf("input x:");
scanf("%d",&x);
TenToTwo(x);
}
附加一句,如果你是学相关专业,最好努力一点。这是一个很简单的问题,如果你连这样的东西都不会。很难找工作的。
已经调试过,ok.
#defien MaxSize 128
//数组的最大值,可以自己修改
void DecToBin(int Dec_Num)
{
int Bin_Array[MaxSize];
int Array_Size = 0;
while(Dec_Num > 0)
{
Bin_Array[Array_Size++] = Dec_Num % 2;
Dec_Num /= 2;
}
}
void DecToOct()//十进制->八进制
{
int Oct_Array[MaxSize];
int Array_Size = 0;
while(Dec_Num > 0)
{
Oct_Array[Array_Size++] = Dec_Num % 8;
Dec_Num /= 8;
}
}
void OctToBin(int Oct_Array[], int Oct_Size)//八进制->二进制
{
int Bin_Array[MaxSize];
int i;
for(i = 0; i < Oct_Size; i++)
{
Bin_Array[3*i + 0] = Oct_Array[i] % 2;
Bin_Array[3*i + 1] = (Oct_Array[i] / 2) % 2;
Bin_Array[3*i + 2] = (Oct_Array[i] / 4) % 4;
}
}
void BinToOct(int Bin_Array[], int Bin_Size)//二进制->八进制,Bin_Size为二进制数的数组的大小
{
int Oct_Array[MaxSize];
int i, j;
int n = Bin_Size / 3;
for(i = 0; i < n; i++)
{
Oct_Array[i] = Bin_Array[3*i + 0] + Bin_Array[3*i + 1] * 2 + Bin_Array[3*i + 2] * 4;
}
Oct_Array[i] = 0;
for(j = 0; i * 3 + j < Bin_Size; j++)
{
Oct_Array[i] += Bin_Array[ i * 3 + j ] * pow(2, j);
}
int Oct_Size = i+ 1;
}
# include
void main()
{
int f,i,j,k[20],l,m;
system("cls");
printf("Please input an integer:");
scanf("%d",&i);
printf("The number you input is: %d",i);
j=i;l=0;
while(j)
{
m=j%2;
j=j/2;
k[l++]=m;
}
printf("\nBinary:");
for(f=l-1;f>=0;f--)printf("%d",k[f]);
j=i;l=0;
while(j)
{
m=j%8;
j=j/8;
k[l++]=m;
}
printf("\nOct:");
for(f=l-1;f>=0;f--)printf("%d",k[f]);
printf("\nPress any key to return...");
getch();
}