文章

2

粉丝

231

获赞

8

访问

19.4k

头像
大数的进制转换
P1178 北京大学上机题
发布于2021年2月22日 11:07
阅读数 14.5k

 

题目: 将一个长度最多为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...
登录查看完整内容


登录后发布评论

1 条评论
Miku
2022年2月12日 20:16

学到了 原来还能这么写代码

赞(0)