题解 P2084 【进制转换】

· · 题解

题目大意

输入m,和一个m进制数,将它转换为用十进制表达的式子。

注意!

对于100%的数据,1<M<10,N的位数不超过1000

m<10我们就不需要去进行字母和数字的转换,直接用暴力模拟。

输入一个字符串,i从0到他的长度-1(c++)

当每一位不等于0,就输出对应的ci,m,i中间插上符号,如果不是最后一个,就加上+号。

判断式1

i==strlen(c)-1? '\n':'+'

80分代码

#include<cstdio>
#include<cstring>
using namespace std;
int m;
char c[1001];
int main()
{
    scanf("%d ",&m);
    gets(c);
    for (int i=0;i<strlen(c);i++)    
     if (c[i]!='0')
      printf("%c*%d^%d%c",c[i],m,strlen(c)-i-1,i==strlen(c)-1? '\n':'+');

}//这种方法能过80分,因为有一种情况没有处理。 例如:

输入 2 10000

输出 1*2^4+

我们发现,它不一定是最后一个才不需要加号,可能它后面没有数了。

所以,我们改变一下判断方法。改成下一次再判断,当它不是0并且不是第一个数是输出+号

判断式2

if(i!=0&&c[i]!='0') printf("+");

AC代码

#include<cstdio>
#include<cstring>
using namespace std;
int m;
char c[1001];
int main()
{
    scanf("%d ",&m);
    gets(c);
    for (int i=0;i<strlen(c);i++)    
    {
     if(i!=0&&c[i]!='0') printf("+");
     if (c[i]=='0') continue;
      printf("%c*%d^%d",c[i],m,strlen(c)-i-1);
    }
}