1. 程式人生 > >洛谷P2084 進制轉換

洛谷P2084 進制轉換

小明 輸入 -- 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 進制轉換