洛谷P2084 進制轉換
阿新 • • 發佈:2019-03-03
小明 輸入 -- name ios 水題 lse line i++
題目背景
無
題目描述
今天小明學會了進制轉換,比如(10101)2 ,那麽它的十進制表示的式子就是 :
1*2^4+0*2^3+1*2^2+0*2^1+1*2^0,
那麽請你編程實現,將一個M進制的數N轉換成十進制表示的式子。
註意:當系數為0時,該單項式要省略。
輸入輸出格式
輸入格式:
兩個數,M和N,中間用空格隔開。
輸出格式:
共一行,一個十進制表示的式子。
說明
對於100%的數據,1<M<10,N的位數不超過1000。
——————————————————————————華麗麗的分割線————————————————————————————————————————————————
好吧,一道水題,看了看題解感覺有的還不如我做的簡單,我的代碼看著比較長,是頭和碼風的事...
首先,題目給了n<=10,所以直接暴力模擬一波是可以的...
n[i]轉換為十進制的格式:n進制中的數*進制^進制所在的位置-1(從右往左數)(不太會描述,看了看題解有個和我想的差不多的就直接套上來了)
至於加號的問題,我看很多人都是從式子後面特判的,但是我覺得只需要判斷1,其他的都不需要,畢竟除了第一個其他的只要是一個式子前面就一定會有加號
代碼如下:
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<string> #include<algorithm> #include<cmath> #include<iomanip> using namespace std; char a[1001]; int main() { int m,w; cin>>m; gets(a);//這裏用字符串的話會更好一些 w=strlen(a); for(int i=1;i<strlen(a);i++) { if(i==1)//判斷是否為第一項,如果是的話前面就不用+ { cout<<a[i]<<"*"<<m<<"^"<<w-2; } else if(a[i]!=‘0‘&&w>0)//一定不要漏else,否則會重判出現兩個第一項,我就是第一次沒加else才WA(wonderful answer)的 { cout<<"+"<<a[i]<<"*"<<m<<"^"<<w-2; } w--; } }
洛谷P2084 進制轉換