問題描述
我們可以用這樣的方式來表示乙個十進位制數: 將每個阿拉伯數字乘以乙個以該數字所處位置的(值減1)為指數,以10為底數的冪之和的形式。例如:123可表示為 1*10
2+2*10
1+3*10
0這樣的形式。
與之相似的,對二進位制數來說,也可表示成每個二進位制數碼乘以乙個以該數字所處位置的(值-1)為指數,以2為底數的冪之和的形式。一般說來,任何乙個正整數r或乙個負整數-r都可以被選來作為乙個數制系統的基數。如果是以r或-r為基數,則需要用到的數碼為 0,1,....r-1。例如,當r=7時,所需用到的數碼是0,1,2,3,4,5和6,這與其是r或-r無關。如果作為基數的數絕對值超過10,則為了表示這些數碼,通常使用英文本母來表示那些大於9的數碼。例如對16進製數來說,用a表示10,用b表示11,用c表示12,用d表示13,用e表示14,用f表示15。
在負進製數中是用-r 作為基數,例如-15(十進位制)相當於110001(-2進製),並且它可以被表示為2的冪級數的和數:
110001=1*(-2)
5+1*(-2)
4+0*(-2)
3+0*(-2)
2+ 0*(-2)
1 +1*(-2)
0 設計乙個程式,讀入乙個十進位制數和乙個負進製數的基數, 並將此十進位制數轉換為此負進製下的數: -r∈{-2,-3,-4,...,-20}
輸入格式
一行兩個數,第乙個是十進位制數n(-32768<=n<=32767), 第二個是負進製數的基數-r。
輸出格式
輸出所求負進製數及其基數,若此基數超過10,則參照16進製的方式處理。(格式參照樣例)
樣例輸入1
30000 -2
樣例輸出
30000=11011010101110000(base-2)
樣例輸入
-20000 -2
樣例輸出
-20000=1111011000100000(base-2)
樣例輸入
28800 -16
樣例輸出
28800=19180(base-16)
樣例輸入
-25000 -16
樣例輸出
-25000=7fb8(base-16)
#include
#include
#include
int n,r,s=0;
char a[20];
int f(int x,int y,int z)
return 0; }
for(i=0;i<-r;i++)
} return 0; }
int main()
} else
} f(i,n,0);
printf("%d=",n);
if(a[0]!='0')
printf("%s",a);
else
for(i=i;i}
printf("(base%d)",r);
return 0; }
藍橋杯 進製轉換
一 十六進製制轉八進位制 問題描述 給定n個十六進製制正整數,輸出它們對應的八進位制數。輸入格式 輸入的第一行為乙個正整數n 1 n 10 接下來n行,每行乙個由0 9 大寫字母a f組成的字串,表示要轉換的十六進製制正整數,每個十六進製制 數長度不超過100000。輸出格式 輸出n行,每行為輸入對...
藍橋杯 進製轉換
問題描述 編寫函式將十進位制整數按8進製輸出,然後編寫main函式驗證該函式。例如輸入12,則輸出為 12 014,輸入32,則輸出32 040。輸入格式 輸入乙個整數。輸出格式 輸出這個整數的八進位制形式。方法使用除基取餘法。利用陣列,將每次除基取的餘數儲存在陣列中,注意最後資料輸出的陣列下標。i...
藍橋杯 演算法提高 進製轉換
演算法提高 進製轉換 時間限制 1.0s 記憶體限制 256.0mb 問題描述 程式提示使用者輸入三個字元,每個字元取值範圍是0 9,a f。然後程式會把這三個字元轉化為相應的十六進製制整數,並分別以十六進製制,十進位制,八進位制輸出。輸入格式 輸入只有一行,即三個字元。輸出格式 輸出只有一行,包括...