解题思路:明白十进制的加法:逢十进一, 借一当十,其他进制数类似;

注意事项:在10进制以上的进制数,有这样的对应关系:10-A,11-B,12-C,13-D,14-E,15-F,我们可以用map来进行对应,计算时利用键,而存储结果时利用值;

参考代码:

#include <bits/stdc++.h>
#define maxlongint 1001
#define limit 30
using namespace std;

char str[maxlongint] = {0};
char result[maxlongint] = {0};
map<int, char>mybinary;

void initial()// 处理10进制数以上进制的转换
{
    for(int i=0; i<10; i++)
        mybinary[i] = '0'+i;
    for(int i=10; i<16; i++)
        mybinary[i] = i-10+'A';
}

bool judge(char *str, int flag) //判定是否位回文数
{
    int left = 0, right = flag-left;
    while (left<right)
    {
        if(str[left] != str[right])
            break;
        else
        {
            left++;
            right--;
        }
    }
    if(left < right)
        return false;
    else
        return true;
}

int main()
{
    int binary; //进制数(2,8,10,16)
    initial();

    cin >> binary;
    scanf(" %s", str);  //给定进制数;

    int flag = strlen(str)-1;
    int cot = 0; //计算执行加法的次数;
    while (cot++ < limit)
    {
        int left = 0, right = flag-left;
        int mod = 0; //处理进位;
        int tmt;

        while (left <= flag)
        {
            /*以下的两条if结构处理(10-A,11-B,12-C,13-D,14-E,15-F)*/
            if('A'<=str[left] && str[left]<='F')
                str[left] -= 7;
            if('A'<=str[right] && str[right]<='F')
                str[right] -= 7;

            tmt = (str[left]-'0') + (str[right]-'0') + mod;
            result[left] = mybinary[tmt%binary];
            mod = tmt/binary;
            left++;
            right--;
        }
        if(mod == 1)
        {
            result[left] = 1+'0';
            flag++;
        }
        if(judge(result, flag))
            break;
        else
            strcpy(str, result);
    }
    if(cot > limit)
        cout << "Impossible!" << endl;
    else
        cout << "STEP=" << cot << endl;
    return 0;
}


点赞(0)
 

0.0分

2 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论