洛谷P2084 进制转换

题目背景

题目描述

今天小明学会了进制转换,比如(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--;
    }
}
原文地址:https://www.cnblogs.com/lcezych/p/10464556.html