来自牛客网上的一道算法题
题目描述
将一个长度最多为30位数字的十进制非负整数转换为二进制数输出。
输入描述:
多组数据,每行为一个长度不超过30位的十进制非负整数。 (注意是10进制数字的个数可能有30个,而非30bits的整数)
输出描述:
每行输出对应的二进制数。
分析:
题目要求输入最多30位,因此不能用数值型数据,而是要将输入的数据看做字符串然后将输入的十进制数字逐位进行计算。
代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
char ch[35];///接受输入值
int bin[1000];///记录转换后的二进制
while(scanf("%s",ch)!=EOF){
int len=strlen(ch);///输入十进制数的长度
int index=0; ///二进制下标
for(int i=0;i<len;){
int rest=0;///每一位取余后的结果
for(int j=i;j<len;j++){
int temp=rest*10+ch[j]-'0';///当前位的值
rest=temp%2;
ch[j]=temp/2+'0';
}
bin[index++]=rest;
while(ch[i]=='0'){///跳过十进制开头的零
i++;
}
}
for(int i=index-1;i>=0;i--){
printf("%d",bin[i]);
}
printf("\n");
}
return 0;
}