曾经沧海难为水,除却巫山不是云。|

Joey-Wang

园龄:4年3个月粉丝:17关注:0

3.5 进制转换

3.5 进制转换

http://codeup.cn/contest.php?cid=100000579

B 数制转换

image-20200704005150829

代码

#include <cstdio>
#include <cstring>

int a_to_ten(int a, char *x) {  //a进制x转换为十进制y
    int y = 0, temp, product = 1;
    for (int i = strlen(x) - 1; i >= 0; i--) {
        if (x[i] >= 'a') x[i] -= 32;
        temp = x[i] >= 'A' ? x[i] - 'A' + 10 : x[i] - '0'; //取得x末位的字符表示的数字
        y += temp * product;
        product *= a;
    }
    return y;
}

int ten_to_b(int b, int y, char *z) {  //十进制y转换为b进制数z 返回z的位数,方便倒序输出
    int num = 0, temp;
    do {
        temp = y % b;
        if (temp <= 9) z[num++] = temp + '0';
        else z[num++] = temp - 10 + 'A';
        y /= b;
    } while (y != 0);
    return num;
}

int main() {
    char x[40], z[40];
    int y, a, b;
    while (scanf("%d %s %d", &a, x, &b) != EOF) {
        y = a_to_ten(a, x);
        int num = ten_to_b(b, y, z);
        for (int i = num - 1; i >= 0; i--) {
            printf("%c", z[i]);
        }
        printf("\n");
    }
    return 0;
}

C 进制转换

image-20200704005527950

题目解析

将大数放入char数组,每次末位字符除2取余后,将char数组除2。

具体除2过程:

从高到低每位除2,若此位为奇数则要给后一位+10,若此位位偶数则后一位不加(自己思考一下数字除2的过程)

代码

#include <cstdio>
#include <cstring>

int main() {
    char ten[35], two[200];
    while (scanf("%s", ten) != EOF) {
        int num = 0;
        int i = 0, jinwei, len = strlen(ten);
        for (int i = 0; i < len; i++) {
            ten[i] -= '0';
        }
        do {
            two[num++] = ten[len - 1] % 2 + '0';   //每次取最后一位的余数

            jinwei = 0;
            for (int j = i; j < len; j++) {
                int temp = ten[j];
                ten[j] = (ten[j] + jinwei) / 2;
                if (temp & 1) jinwei = 10;  //若是奇数,则下一位+10
                else jinwei = 0;  //若是偶数,则加一位+0
            }
            if (ten[i] == 0) i++;
        } while (i < len);

        for (int i=num-1;i>=0;i--){
            printf("%c",two[i]);
        }
        printf("\n");
    }
    return 0;
}

本文作者:Joey-Wang

本文链接:https://www.cnblogs.com/joey-wang/p/14541163.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Joey-Wang  阅读(75)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
展开