文章

26

粉丝

0

获赞

8

访问

1.6k

头像
进制转换 题解:C++ 可主要分为两步:1.大数对2取余;2.大数除以2
P1178 北京大学上机题
发布于2025年6月25日 18:41
阅读数 71

#include<bits/stdc++.h>
using namespace std;

bool isZero(int a[],int len){
	for(int i=0;i<len;i++){
		if(a[i]!=0){
			return false;
		}
	}
	return true;
}

int main(){
	string s;
	while(cin>>s){
		int num[100]={0},a[100]={0},index=0;//a数组中保存余数 
		int len=s.length();
		for(int i=0;i<len;i++){
			num[i]=s[i]-'0';
		}
		
		//循环截止条件就是整个大数的数组全都是0 
		while(!isZero(num,len)){
			//对余数的判断,因为对2取余的话只需要看最后一位能否被2整除即可 
			a[index]=num[len-1]%2;

			//一个这个操作相当于对整个大数进行了除以2的操作 
			for(int j=0;j<len;j++){
				//对目前的这一位进行除法计算 
				int m=num[j]/2;
				//下一位的数是等于原来下一位的数+目前这一位的余数*10 
				num[j+1]=num[j+1]+(num[j]%2)*10;
				//将目前这一位的数修改为除以2之后的数 
				num[j]=m;
			}
			index++;
		}
		if(index==0){
			cout<<0;
		}else{
			for(int i=index-1;i>=0;i--){
				cout<<a[i];
			}
		}
		cout<<endl;
	}
	return 0;
}

 

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发