题解 P2084 【进制转换】

· · 题解

进制转换的格式一定要看懂:

n[i]转换为十进制的格式:n进制中的数*进制^进制所在的位置-1(从右往左数)。

例如题中二进制10101,n[1]为1,进制为2,进制所在位置为5,那么格式为1*2^4。

这个问题解决就意味着完成了80%,接下来就是输出的问题了。

我们可以先考虑输出不输出加号:

1.第一次转换输出不需要加号;

2是如果这项系数为0,那么也不需要输出加号,这个必须要判断,否则会出现两个加号连在一起的情况

那么接下来就可以放心大胆的输出单项式了。

#include<stdio.h>
#include<string.h>
int main()
{
    int i,jz,j;
    char n[1005];
    scanf("%d%s",&jz,n);//读入进制和进制下的数(注意,字符串不需要取地址符)
    for(i=0,j=strlen(n)-1;i<strlen(n);i++,j--)//i是为了指向每一位数,j是为了输出所在位置
    {
        if(i!=0&&n[i]!='0') printf("+");//判断是否第一项,是输出加号。当然如果系数为0也不需要输出
        if(n[i]!='0') printf("%c*%d^%d",n[i],jz,j);//判断系数是否为0,不是输出
    }
    return 0;
}