1 条题解

  • 0
    @ 2025-8-24 21:33:49

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar Ajwallet
    厌倦追寻,一觅即中

    搬运于2025-08-24 21:33:48,当前版本为作者最后更新于2017-10-24 17:27:31,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    题目大意

    输入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);
        }
    }
    
    • 1

    信息

    ID
    1049
    时间
    1000ms
    内存
    125MiB
    难度
    1
    标签
    递交数
    0
    已通过
    0
    上传者