P2084 進制轉換
題目背景
無
題目描述
今天小明學會了進制轉換,比如(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 進制轉換