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了一下,大佬的代码,结果发现比我复杂。

posted @ 2018-05-02 19:24  神韵袖藏  阅读(160)  评论(0编辑  收藏  举报