10進位制 VS 2進位制

菜渣發表於2018-07-10

 

 

 

Codeup網址:http://codeup.cn/problem.php?cid=100000593&pid=5

 

問題 : 10進位制 VS 2進位制

時間限制: 1 Sec  記憶體限制: 32 MB

題目描述

對於一個十進位制數A,將A轉換為二進位制數,然後按位逆序排列,再轉換為十進位制數B,我們稱B為A的二進位制逆序數。
例如對於十進位制數173,它的二進位制形式為10101101,逆序排列得到10110101,其十進位制數為181,181即為173的二進位制逆序數。

輸入

一個1000位(即10^999)以內的十進位制數。

輸出

輸入的十進位制數的二進位制逆序數。

樣例輸入

985

樣例輸出

623

 

AC程式碼:

#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
int main(){
	char str[1001];
	while(scanf("%s",str)!=EOF){
		int kk=strlen(str),str1[1001],buf[1001],arr[1001];
		memset(buf,0,sizeof(buf));
		memset(arr,0,sizeof(arr));
		for(int i=0;i<kk;i++){
			str1[i]=str[i]-'0';
		}
		int sum=1,k=0,d=0;
		while(sum){
			sum=0;
			for(int i=0;i<kk;i++){
				d=str1[i]/2;
				sum+=d;
				if(i==kk-1){
					buf[k++]=str1[i]%2;
				}
				else{
					str1[i+1]+=(str1[i]%2)*10;
				}
				str1[i]=d;
			}
		}
		int i,j,i2=0,per;
		for(i=0;i<k;){
			int carry=0;
			for(j=i;j<k;j++){
				int temp=buf[j]+carry*2;
				carry=temp%10;
				buf[j]=temp/10;
			}
			arr[per++]=carry;
			while(buf[i]==0){
				i++;
			}
		}
		for(int i=per-1;i>=0;i--){
			printf("%d",arr[i]);
		}
		per=0;
		printf("\n");
	}
	return 0;
}

 

相關文章