10进制转2进制 : 将一个长度最多为30位数字的十进制非负整数转换为二进制数输出
10进制模2,i控制被除数开始位置,j控制除数运算,依次除以2,模2
代码:
#include <stdio.h>
#include <string.h>
int main(){
char str[31];
while(scanf("%s",str)!=EOF){
int i,j,len=strlen(str);
int num[31];//记录10进制的数字
for(i=0;i<len;i++){
num[i]=str[i]-‘0’;
}
int index=0;//结果数组下标
int res[2000];//保存余数
//关键
for(i=0;i<len;){//i控制被除数开始位置
int temp=0,remain=0;//保留余数
for(j=i;j<len;j++){//各个数位上的数依次做除数运算,去除以2,模2
temp=(10*remain+num[j])%2;
num[j]=(10*remain+num[j])/2;
remain=temp;
}
res[index]=remain;//记录每一次除以2的余数
index++;
while(num[i]==0){//从非0元素开始
i++;
}
}
for(i=index-1;i>=0;i--){
//从高位开始输出
printf("%d",res[i]);
}
}
return 0;
}