題目鏈接:https://www.luogu.org/problem/P2084
P2084 進制轉換
題目背景
無
題目描述
今天小明學會了進制轉換,比如(10101)2 ,那么它的十進制表示的式子就是 :
1*2^4+0*2^3+1*2^2+0*2^1+1*2^0,
那么請你編程實現,將一個M進制的數N轉換成十進制表示的式子。
注意:當系數為0時,該單項式要省略。
輸入格式
兩個數,M和N,中間用空格隔開。
輸出格式
共一行,一個十進制表示的式子。
輸入輸出樣例
2 10101
1*2^4+1*2^2+1*2^0
說明/提示
對于100%的數據,1<M<10,N的位數不超過1000。
這道基礎題的考點是有關于N進制的轉換問題。
關于進制轉換,我相信學過計算機的人都應有所了解,但既然寫博客的目的是記錄學習過程,夯實基礎,那在這里我還是詳細的說一下吧!
以二進制轉十進制為例:
例如:101011 ,其實就是基數為2的冪的和,也就是“1*2^5 + 0*2^4 + 1*2^3 + 0*2^2 + 1*2^1 + 1*2^0”
公式就是:abcd.efg(2)=d*20+c*21+b*22+a*23+e*2-1+f*2-2+g*2-3(10)
小數部分暫且說(其實就是把冪依次降低)
至于十進制轉二進制的方法想必不用我多說了吧(相信你們都會)
1 while(m!=0) 2 { 3 a[++k]=m%2; 4 m/=2; 5 }
?
*總的來說:
N進制轉M進制的方法:
·1.可以先全化成二進制,在轉換成M進制 (簡單但復雜)
·2.直接轉換(麻煩且容易出錯的簡便)
?
所以這道題你只要懂了進制之間的轉換關系,其實很簡單的。
1 #include <cstring> 2 #include <iostream> 3 4 using namespace std; 5 6 int n, len; 7 8 string a; 9 10 int main() 11 { 12 cin >> n >> a; 13 len = a.size() - 1; 14 int k = 0; 15 for (int i = 0; i <= len; i++) 16 if (a[i] == '0') 17 k++; 18 k = len - k; 19 int tmp = len; 20 for (int i = 0; i <= len; i++) 21 { 22 if (a[i] == '0') 23 { 24 tmp--; 25 continue; 26 } 27 else 28 { 29 cout << a[i] << "*" << n << "^" << tmp; 30 if (k) 31 { 32 cout << "+"; 33 k--; 34 } 35 tmp--; 36 } 37 } 38 return 0; 39 }
?
夯實基礎,認真做好每一道題!!!
作者:Gmax
本文版權歸作者和博客園共有,轉載請用鏈接,請勿原文轉載,Thanks?(・ω・)ノ
2019-08-10
abcd.efg(2)=d*20+c*21+b*22+a*23+e*2-1+f*2-2+g*2-3(10)