題目:
(選做) 在數的表示中,一個具有重要意義的發明是中華民族創造的位值制,這是世界上獨一無二的獨特創造,位值制是指符號放在不同的位置可以表示不同的數值,比如,十進制數2020,第一個2表示2000,而第二個2表示20,不同數制系統可以采用不同的基底,例如十進制采用10,二進制采用2,十六進制采用16,Fibonacci進制則采用Fibonacci數作為基等,而事實上也可以用負整數或復數作為基,例如,用復數-1+i作為基,可以表示所有的復數,不同的進制系統,有不同的優勢,比如 二進制最容易電路實作,所以現在計算機普遍采用二進制,三進制則可以存盤更多的資訊,也更符合人類的思維習慣,因為事情不總是只有真和假,還有不真也不假,例如蘇聯曾經研制過三進制計算機,而采用負數進制則可以避免處理正負號的問題,現在我們就考慮一下負數進制的問題,給定一個十進制的整數n(-231~231-1),你需要把它轉換為以-2為基的數,其中數字符號采用{0,1},例如:十進制1、8、-15對應的-2進制數分別是:1、11000、110001,可以測驗更多的資料
-214210953 110111010011001011101110001011
27309684 110111000011100101110110100
-131724826 1000011110100001111000111010
132603035 11000001110001010110111101111
推廣:將程式擴展到任意K(|K|<10)進制,
#include <iostream>
using namespace std;
int a[500],k;
//如果為負數的情況:
void func1(int n)
{
int temp,zz=0;
while (n)
{
temp = n / k;
if (k * temp > n)temp++;
a[zz++] = n + (-k) * temp;
n = temp;
}
for (int i = zz - 1; i >= 0; i--) {
cout << a[i];
}
}
//如果為正數的情況
void func2(int n)
{
int temp, zz = 0;
while (n)
{
a[zz++] = n % k;
n /= k;
}
for (int i = zz - 1; i >= 0; i--) {
cout << a[i];
}
}
int main()
{
int n;
cin >> k >>n;
if (k < 0) {
func1(n);
}
else {
func2(n);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/266371.html
標籤:其他
