本篇以十进制怎么转二进制为导论,举一反三讨论十进制怎么转任意进制
方法:短除法
一、十进制怎么转二进制
思路:
假设给定一个十进制数,怎么转成二进制。方法便是对十进制数除以要转化的进制数,取余,直到除数=0。
例1:
9——1001
9/2=4...1
4/2=2...0
2/2=1...0
1/2=0...1【当除数为0时,停止】
倒序取余数即为1001,如果你不明白为什么要倒序,请看例2
例2:
13——1101
13/2=6...1
6/2=3...0
3/2=1...1
1/2=0...1
这下你应该能看出需要倒序输出余数
代码:
【你需要定义一个数组,存放余数,然后倒序输出】
#include<stdio.h>
int main(){
int x,a,b[1000]={0},
while(~scanf("%d",&x)){
int i=0;a=-1;
while(a!=0){
a=x/2;
b[i]=x%2;
i++;
x/=2;
}
i--;
for(i;i>=0;i--){
printf("%d",b[i]);
}
printf("\n");
}
}
现在你会了十进制转二进制,现在让我们举一反三写出十进制转任意进制
二、十进制转任意进制
思路:本质上与十进制转二进制没有任何区别,你唯一要改变的便是:把 /2 改为 /任意进制
需要注意的是,如果你要的进制带字母如ABCDEF,你需要用%c输出字符。
代码:十进制转r进制
#include<stdio.h>
int main(){
int x,r,a=-1,b[1000]={0};
while(~scanf("%d%d",&x,&r)){
int i=0;a=-1;
while(a!=0){
a=x/r;
b[i]=x%r;
i++;
x/=r;
}
i--;
for(i;i>=0;i--){
if(b[i]<10)
printf("%d",b[i]);
else{//A-10-65
printf("%c",b[i]+55);
}
}
printf("\n");
}
}
三、十进制转十六进制
现在你会了十进制转任意进制就会发现,十进制转十六进制完全不在话下了对吧:)
你马上就会发现,只需要将上面的r改成16就OK了