1 条题解

  • 0
    @ 2025-4-14 18:45:30

    C :

    #include <stdio.h>
    int x2i(char c)
    {
        if (c >= 'A')
            return c - 55;
        else
            return c - 48;
    }
     //转化为十进制
     long scanf_kint(int k)
    {
        char str[1024];
        scanf("%s", str);
        int i = 0;
         long n = 0;
        while (str[i])
        {
            n = n * k + x2i(str[i]);
            i++;
        }
        return n;
    }
     //转化为十进制
    int aba( long n, int k)//将十进制转化为k进制,判断是否为回文数
    {
        char str[1024];
        int i = 0, j;
        while (n > 0)
        {
            str[i++] = n % k;
            n /= k;
        }
        for (j = 0; j < i / 2; j++)
            if (str[j] != str[i - j - 1])
                break;
        return j == i / 2 ? 1 : 0;
    }
     
     long calc( long n, int k)
    {
         long r = n;
        char str[1024];
        int i = 0, j;
        while (n > 0)//将十进制转化为k进制再将k进制倒着转化为十进制,相加;
        {
            str[i++] = n % k;
            n /= k;
        }
        n = 0;
        for (j = 0; j < i; j++)
            n = n * k + str[j];
        return r + n;
    }
     
    int main()
    {
        int i, k;
      long n;
        scanf("%d", &k);
        n = scanf_kint(k);
        for (i = 0; i < 30; i++)
        {
            if (aba(n, k))
                break;
            n = calc(n, k);
        }
        if (i == 30)
            printf("Impossible!");
        else
            printf("STEP=%d\n", i);
        return 0;
    }
    

    C++ :

    #include<iostream>
    #include<algorithm>
    #include<cstring>
    #include<ctime>
    #include<cmath>
    #include<string>
    #include<cstdio>
    using namespace std;
    
    //生成测试数据
    void initData()
    {
        srand((int)time(NULL));
        for(int cas = 0; cas < 10; ++cas)
        {
    
        }
    }
    
    bool judge(string s)
    {
        int len = s.length();
        int i = 0, j = len - 1;
        while(s[i] == s[j])
        {
            i++, j--;
            if(i >= j) return true;
        }
        return false;
    }
    
    string add(string s1, string s2, int n)
    {
        int len = s1.length();
        int t = 0;
        string s;
        //cout<<s1<<"---"<<s2<<endl;
        for(int i = 0; i <= len; ++i) s += (char)0;
        for(int i = len-1; i >= 0; --i)
        {
            int d = s1[i] + s2[i] + s[i+1];
            if(s1[i] >= 'A' && s1[i] <= 'F') d = d - 'A' + 10;
            else d = d - '0';
            if(s2[i] >= 'A' && s2[i] <= 'F') d = d - 'A' + 10;
            else d = d - '0';
            //cout<<d<<"**"<<"\t";
            if(d >= n) d -= n, s[i] += 1;
            if(n == 16 && d >= 10) d += 'A' - 10;
            else d += '0';
            s[i+1] = (char)d;
        }
    
        string s3 = "";
        if(s[0] == 0){
            for(int i = 1; i <= len; ++i) s3 += s[i];
            return s3;
        }
        else
        {
            s[0] = s[0] + '0';
        }
        //cout<<s<<"***"<<endl;
        return s;
    }
    
    int main()
    {
        //freopen("test.in", "w", stdout);
        //freopen("test.in", "r", stdin);
        //freopen("test.out", "w", stdout);
        //initData();
        string s, s1, s2;
        int n;
        cin>>n>>s;
        if(judge(s)) cout<<"STEP="<<0<<endl;
        else
        {
            bool f = false;
            for(int i = 0; i < 30; ++i)
            {
                s1 = "";
                for(int j = s.length() - 1; j >= 0; --j) s1 += s[j];
                s = add(s, s1, n);
                //cout<<s<<endl;
                if(judge(s))
                {
                    printf("STEP=%d\n", i+1);
                    f = true;
                    break;
                }
            }
            if(!f) puts("Impossible!");
        }
        return 0;
    }
    
    
    • 1

    信息

    ID
    3448
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者