# Number System# Base Conversion# Math

a034v2 - Binary to Decimal Conversion

🔗 前往 ZeroJudge 原題

題目描述

題目要求將輸入的二進位數字轉換為十進位數字。輸入為一個正整數,代表二進位數字,輸出則為其對應的十進位數字。

解題思路

程式碼使用迴圈迭代輸入的二進位數字的每一位。在每次迭代中,它提取最低位,將其乘以 10 的 i 次方(其中 i 是位數),然後將結果加到答案中。然後,它將二進位數字右移一位,以處理下一位。這個過程一直持續到二進位數字變為 0。

複雜度分析

  • 時間複雜度: O(log(a)),其中 a 是輸入的二進位數。因為迴圈的次數與二進位數的位數成正比,而二進位數的位數與 log2(a) 成正比。
  • 空間複雜度: O(1),程式碼只使用了幾個整數變數,空間使用不隨輸入大小變化。

程式碼

#include <iostream>
#include <cmath>

using namespace std;

int main(){
	int a,i;
	
	while(	cin >> a){
		i =0;
		long long ans=0;
		while(a>0){
			ans += a%2*pow(10,i);
			a/=2;
			i++;
		}
		cout << ans<<endl;
	}
	return 0;
}

Discussion