题目背景
无
题目描述
今天小明学会了进制转换,比如(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--; } }