基礎問題:進位制轉換

yoursmy10發表於2020-12-18

進位制轉換基礎問題
對一個P進位制的數要轉換成Q進位制,需要分為兩步:
1.將一個P進位制數x轉換為十進位制數y
2.將十進位制數轉換成Q進位制數

STEP1:
對一個十進位制數y=d1d2…dn,可以寫成:
y=d110n-1+d210n-2+…+dn-110+dn;
同樣的,如果P進位制數x為a1a2…an,那麼它寫成下面這個形式之後使用十進位制加法和乘法,就可以轉換為十進位制數y:
y=a1
Pn-1+a2Pn-2+…+an-1P+an;
而這個公式可以很容易用迴圈進行實現:

int y=0;int product=0;
while(x!=0)
{
	y+=(x%10)*product;
	x=x/10;
	product=product*P;//P為轉換前進位制
}

STEP2:將十進位制數轉化為Q進位制數z
採用“除基取餘法”。基:指將要轉換成的進位制Q,因此除基取餘的意思就是每次將待轉換數除以Q,然後將得到的餘數作為低位儲存,而商則繼續除以Q並進行上面的操作,最後當商==0時,將所有位從高到低輸出就可以得到z。

		eg:將十進位制數11轉換為二進位制數:(D to B)
//十進位制轉二進位制
int z[40]=NULL;int count=0;
while(x!=0)
{
	z[count]=x%2;
	count++;
	x=x/2;
}
for(int i=count-1;i>=0;i++)
{print(z[i]);}

練習題:PAT B1022 :D進位制的A+B

  輸入兩個非負十進位制整數A和B(<=2^30-1^ )以及D(進位制數),輸出A+B的D(1<D<=10)

  輸入格式:在一行中一次給出三個整數A、B和D;輸出D

非常的簡單。

#include<iostream>;

using namespace std;
int main()
{
	int A, B; int D, sum;
	int z[40]; int count = 0;
	cout << "enter A,B,C" << endl;
	cin >> A >> B >> D;
	if (D > 10 || D <= 1)
	{
		cout << "error!illegal input" << endl;
		return 0;
	}
	sum = A + B;
	while (sum != 0)
	{
		z[count] = sum % D;
		count++;
		sum = sum / D;
	}
	for (int i = count - 1; i >= 0; i--)
	{
		cout << z[i];
	}
	return 1;

}

《演算法筆記》

相關文章