题目描述
知识点
我的实现
码前思考
代码实现
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
struct bign{
int d[50];
int len;
bign(){
fill(d,d+50,0);
len=0;
}
};
bign change(char str[]){
int len = strlen(str);
bign a;
for(int i=0;i<len;i++){
a.d[i] = str[len-1-i]-'0';
a.len++;
}
return a;
}
bign divide(bign a,int b,int &r){
bign c;
c.len = a.len;
for(int i=a.len-1;i>=0;i--){
r = r*10+a.d[i];
c.d[i] = r / b;
r = r % b;
}
while(c.len-1>=1&&c.d[c.len-1]==0){
c.len--;
}
return c;
}
char str[50];
int main(){
while(scanf("%s",str)!=EOF){
bign a = change(str);
int binary[200];
int num = 0;
do{
int r=0;
a = divide(a,2,r);
binary[num]=r;
num++;
if(a.len==1&&a.d[0]==0){
break;
}
}while(true);
for(int i=0;i<num;i++){
printf("%d",binary[num-1-i]);
}
printf("\n");
}
return 0;
}
码后反思
- 主要是要用到高精度除法,注意不要把余数拉下了。还有前导0的去处!
- 可以使用
string
来代替结构体的~ - 可以使用
while(cin>>str)
来表示输入结束,这是我一直忽视的。