文章
2
粉丝
231
获赞
8
访问
20.4k
题目: 将一个长度最多为30位数字的十进制非负整数转换为二进制数输出
输入:多组数据,每行为一个长度不超过30位的十进制非负整数。(注意是10进制数字的个数可能有30个,而非30 bits的整数)
输出:每行对应的二进制数
题目来源:北京大学上机题
解题思路:
30位十进制数如何保存?int型为10的9次方,long long 为10的19次方,均不能存储,故选择字符串存储
字符串转二进制?== 字符串如何%2 如何÷2
字符串如何%2?%2相当于判断该大数是否为偶数,只需判断最后一位即可
字符串如何÷2?模拟除法过程
代码
#include <bits/stdc++.h>
using namespace std;
char src[200]={0};
int srci[200] = {0};
bool isZero(int len){ //判断是否为0
for(int i=0;i<len;i++){
if(srci[i]!=0) return false;
}
return 1;
}
int main(){
while(cin>>src){
int len=strlen(src);
for(int i=0;i<len;i++){
srci[i]=src[i]-'0';
}
int w[105]={0};
int cnt=0;
while(!isZero(len)){
w[cnt]=srci[len-1]%2;
for(int i=0;i<len;i++){ // 除法运算 从最高位开始,本位=本位/2,本位低一位要加上上一位没有除完全的
int y =srci[i]/2;
srci[i+1]+=srci[i]%2*10;
srci[i]=y;
}
cnt++;
}
if(cnt==0) c...
登录后发布评论
学到了 原来还能这么写代码