#include<stdio.h>
int main(){
char a[40];
int b[40];
int ans[200];
int i,j,len;
while(scanf("%s",&a)!=EOF){
for(i=0;a[i]!=0;i++){
b[i]=a[i]-'0';
}
len=i;
j=0;
while(len!=0){
if(b[len-1]%2==0){
ans[j]=0;
}
else{
ans[j]=1;
}
j++;
for(i=0;i<len-1;i++){
if(b[i]%2==0){
b[i]=b[i]/2;
}
else{
b[i]=b[i]/2;
b[i+1]+=10;
}
}
b[len-1]=b[len-1]/2;
if(b[0]==0){
for(i=0;i<len-1;i++){
b[i]=b[i+1];
}
len--;
}
}
for(j--;j>=0;j--){
printf("%d",ans[j]);
}
printf("\n");
}
return 0;
int main(){
char a[40];
int b[40];
int ans[200];
int i,j,len;
while(scanf("%s",&a)!=EOF){
for(i=0;a[i]!=0;i++){
b[i]=a[i]-'0';
}
len=i;
j=0;
while(len!=0){
if(b[len-1]%2==0){
ans[j]=0;
}
else{
ans[j]=1;
}
j++;
for(i=0;i<len-1;i++){
if(b[i]%2==0){
b[i]=b[i]/2;
}
else{
b[i]=b[i]/2;
b[i+1]+=10;
}
}
b[len-1]=b[len-1]/2;
if(b[0]==0){
for(i=0;i<len-1;i++){
b[i]=b[i+1];
}
len--;
}
}
for(j--;j>=0;j--){
printf("%d",ans[j]);
}
printf("\n");
}
return 0;
}
用了一个小时十分钟 加油 一定要加油
本题思路 是按照正常笔算二进制的方法 因为整数很大 所以一位一位的看
但是还是要注意边界值 比如 在每次将其除以二的时候 对于最后一位应单独处理