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

P2084 進制轉換

註意 超過 就是 char strong adg CP 今天 sin

題目背景

題目描述

今天小明學會了進制轉換,比如(10101)2 ,那麽它的十進制表示的式子就是 :

1*2^4+0*2^3+1*2^2+0*2^1+1*2^0,

那麽請你編程實現,將一個M進制的數N轉換成十進制表示的式子。

註意:當系數為0時,該單項式要省略。

輸入輸出格式

輸入格式:

兩個數,M和N,中間用空格隔開。

輸出格式:

共一行,一個十進制表示的式子。

輸入輸出樣例

輸入樣例#1: 復制
2 10101
輸出樣例#1: 復制
1*2^4+1*2^2+1*2^0

說明

對於100%的數據,1<M<10,N的位數不超過1000。

我沒看到M<10,所以一不小心把任意進制轉換的都寫出來了(除了1)

代碼如下:

#include<iostream>
#include<string>
using namespace std;
char *p = "*^+";
int ch(char n)
{
if (n >= ‘0‘&&n <= ‘9‘)return n - ‘0‘;
else return n - ‘A‘ + 10;
}
int main()
{
int num;
string nn;
cin >> num >> nn;

int len = nn.length();
int p = len - 1;
cout << ch(nn[0]) << "*" << num <<"^"<<p;
p--;
for (int i = 1; i < len; i++)
{
if (!ch(nn[i]) == 0)
{
cout << "+";
cout << ch(nn[i]) << "*" << num << "^" << p;
}
p--;
}
cout << endl;
return 0;
}

剛剛,開始是有錯誤的,比如輸入 2 1000

則輸出 1*2^3+ 則不需要後面的加號的。

因為我寫的是只要不是最後一個數和非0,就在後面加+

後來,改變了判斷條件變成了 1.第一個數字一定為非0,2.判斷非0前面一定有“+”號

我cpy了一下,大佬的代碼,結果發現比我復雜。

P2084 進制轉換