进制转换(洛谷-P1017)
題目描述
我們可以用這樣的方式來(lái)表示一個(gè)十進(jìn)制數(shù): 將每個(gè)阿拉伯?dāng)?shù)字乘以一個(gè)以該數(shù)字所處位置的(值減?1?)為指數(shù),以?10?為底數(shù)的冪之和的形式。例如:?123 可表示為?1*10^2+2\*10^1+3*10^0?這樣的形式。
與之相似的,對(duì)二進(jìn)制數(shù)來(lái)說(shuō),也可表示成每個(gè)二進(jìn)制數(shù)碼乘以一個(gè)以該數(shù)字所處位置的(值?-1?)為指數(shù),以?2為底數(shù)的冪之和的形式。一般說(shuō)來(lái),任何一個(gè)正整數(shù)?RR?或一個(gè)負(fù)整數(shù)??R?都可以被選來(lái)作為一個(gè)數(shù)制系統(tǒng)的基數(shù)。如果是以?R?或??R?為基數(shù),則需要用到的數(shù)碼為 0,1,....R?1?。例如,當(dāng)?R=7?時(shí),所需用到的數(shù)碼是 0,1,2,3,4,5?和?6?,這與其是?R?或??R?無(wú)關(guān)。如果作為基數(shù)的數(shù)絕對(duì)值超過(guò)?10?,則為了表示這些數(shù)碼,通常使用英文字母來(lái)表示那些大于?99?的數(shù)碼。例如對(duì)?1616?進(jìn)制數(shù)來(lái)說(shuō),用?AA?表示?1010?,用?B?表示?11,用?C?表示?12?,用?D 表示?13?,用?E?表示?14?,用?F?表示?15?。
在負(fù)進(jìn)制數(shù)中是用??R?作為基數(shù),例如??15?(十進(jìn)制)相當(dāng)于 110001?(??2?進(jìn)制),并且它可以被表示為?2?的冪級(jí)數(shù)的和數(shù):
110001=1*(-2)^5+1*(-2)^4+0*(-2)^3+0*(-2)^2+0*(-2)^1+1*(-2)^0
設(shè)計(jì)一個(gè)程序,讀入一個(gè)十進(jìn)制數(shù)和一個(gè)負(fù)進(jìn)制數(shù)的基數(shù), 并將此十進(jìn)制數(shù)轉(zhuǎn)換為此負(fù)進(jìn)制下的數(shù):?-R∈{-2,-3,-4,...,-20}
輸入輸出格式
輸入格式:
輸入的每行有兩個(gè)輸入數(shù)據(jù)。
第一個(gè)是十進(jìn)制數(shù)?N?( ?32768≤N≤32767?)
第二個(gè)是負(fù)進(jìn)制數(shù)的基數(shù)??R?。
輸出格式:
結(jié)果顯示在屏幕上,相對(duì)于輸入,應(yīng)輸出此負(fù)進(jìn)制數(shù)及其基數(shù),若此基數(shù)超過(guò)?10?,則參照?16?進(jìn)制的方式處理。
輸入輸出樣例
輸入樣例#1:
30000 -2
輸出樣例#1:
30000=11011010101110000(base-2)
輸入樣例#2:
-20000 -2
輸出樣例#2:
-20000=1111011000100000(base-2)
輸入樣例#3:
28800-16
輸出樣例#3:
28800=19180(base-16)
輸入樣例#4:
-25000 -16
輸出樣例#4:
-25000=7FB8(base-16)
思路:與正數(shù)的進(jìn)制轉(zhuǎn)換一樣,通過(guò)短除即可,要注意的是,如果某個(gè)數(shù)位出現(xiàn)負(fù)數(shù),需要從上一位借一個(gè)1來(lái)進(jìn)行運(yùn)算
源代碼
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #include<string> #include<cstdlib> #include<queue> #include<set> #include<map> #include<stack> #include<ctime> #include<vector> #define INF 0x3f3f3f3f #define PI acos(-1.0) #define N 50001 #define MOD 1e9+7 #define E 1e-6 #define LL long long using namespace std; int num,m; void calculate(int n) {int k=n%m;n=n/m;if(k<0){k-=m;n++;}if(n!=0)calculate(n);if(k<10)cout<<k;elsecout<<(char)(k-10+'A'); } int main() {cin>>num>>m;cout<<num<<"=";calculate(num);cout<<"(base"<<m<<")"<<endl;return 0; }?
總結(jié)
以上是生活随笔為你收集整理的进制转换(洛谷-P1017)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 理论基础 —— 排序 —— 桶排序
- 下一篇: 常用技巧 —— 位运算 —— 异或运算实