整数部分的进制转换就是:
整数与基数辗转相除,所得余数逆序排列
即最后所得的余数在最前面
解法一:辗转相除法
#include<stdio.h>
int main()
{
int a,b,c[100],count=0;
scanf("%d%d",&a,&b);
if(a==0)
printf("0\n");
for(int i=0;a%b!=0;i++)
{
c[i]=a%b;
a=a/b;
count++;
}
for(int j=count-1;j>=0;j--)
{
if(c[j]>=10)
printf("%c",c[j]-10+'A');
else
printf("%d",c[j]);
}
}
解法二:利用位运算
#include<stdio.h>
int main()
{
int a,m,n,c[100],count=0;
scanf("%d",&a);
while(a)
{
count++;
c[count-1]=a&1;
a/=2;
}
for(int i=count-1;i>=0;i--)
{
printf("%d",c[i]);
}
}
二进制转换为10进制
#include<stdio.h>
int main()
{
int a,m,n,c[100],count=0,temp;
scanf("%d%d%d",&a,&m,&n);
while(a)
{
count++;
c[count-1]=a&1;
a/=2;
}
temp=c[m];
c[m]=c[n];
c[n]=temp;
int ans=0,p=1;
for(int i=0;i<=count;i++)
{
ans+=c[i]*p;
p*=2;
}
printf("%d\n",ans);
}