文章

4

粉丝

15

获赞

0

访问

1.6k

头像
十进制和二进制 题解:C
P1176 清华大学上机题
发布于2024年8月20日 22:29
阅读数 303

逻辑有点混乱凑合看看

#include<stdio.h>
#include<string.h>

int max(int a,int b){
	if(a>b)return a;
	else return b;
}

void add(char a[1005],char b[1005],char c[1005]){
	int maxl=max(strlen(a),strlen(b));
	int k=0;
	for(int i=0;i<maxl;i++){
		int av=(a[i]-'0');
		int bv=(b[i]-'0');
		if(a[i]==0)av=0;
		if(b[i]==0)bv=0;
		int ans=(av+bv)+k;
		c[i]=ans%10+'0';
		k=ans/10;
		if(i==maxl-1 && k>0) c[i+1]='1';
	}
}

int main(){
	char a[1005],bin[1005]={0};
	int inte[1003];
	while(scanf("%s",a)!=EOF){
		int l=strlen(a);
		for(int i=0;i<l;i++) inte[i]=a[i]-'0';//转int数组 
		int j=0,m=0;
		while(j<l){//高位舍完则结束
			bin[m++]=inte[l-1]%2+'0';
			for(int i=j;i<l;i++){//除2
				inte[i+1]+=inte[i]%2*10;
				inte[i]/=2;
			}
			if(inte[j]==0)j++;//高位得0则舍去
		}

		char shi[1005][1005]={0};
		shi[0][0]='1';
		for(int i=1;i<m;i++){//计算并存储每一位二进制对应的十进制 
			add(shi[i-1],shi[i-1],shi[i]);
		}
		
		char ans[1005]={0};
		for(int i=m...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发