文章

13

粉丝

0

获赞

3

访问

633

头像
十进制和二进制 python题解:
P1176 清华大学上机题
发布于2026年5月23日 10:13
阅读数 39

while True:
    try:
        a=int(input())
        a=format(a,'b')
        b=a[::-1]
        b=int(b,2)
        print(b)
    except:
        break
        
    
 

登录查看完整内容


登录后发布评论

1 条评论
yngshq
2026年5月23日 11:44

1.int(x,base):将x转化为base进制的整数,base为2/10/.../36

2.format(x,y):将x转化为y进制的字符串,y为'b'/'o'/'d'/'x',分别对应二,八,十,十六进制

3.python的int型无上限,不会对精度产生影响;c语言的int最多64位

4.C语言需要把输入的字符串存入字符串数组,并在字符串数组中模拟手动除法计算十进制一次除法余数

    

int divide_by_2(char *num) {
    int len = strlen(num);
    int carry = 0;   // 进位
    for (int i = 0; i < len; i++) {
        int cur = carry * 10 + (num[i] - '0');
        num[i] = (cur / 2) + '0';   // 商覆盖原数字
        carry = cur % 2;            // 新的进位
    }
    // 去掉结果的前导零(例如 "086" -> "86")
    int start = 0;
    while (start < len && num[start] == '0') start++;
    if (start == len) {
        num[0] = '0';
        num[1] = '\0';
    } else {
        memmove(num, num + start, len - start + 1);//目标地址:num源地址:num + start复制字节数:len - start + 1
    }
    return carry;   // 余数即为二进制位
}
int main() {
    char dec[1010];
    while (scanf("%s", dec) != EOF) {
        char bin_rev[4000];   // 存放逆序二进制
        int idx = 0;
        // 处理输入为 "0" 的情况
        if (dec[0] == '0' && dec[1] == '\0') {
            printf("0\n");
            continue;
        }
        while (1) {
            // 如果当前数字已经是 "0",结束
            if (dec[0] == '0' && dec[1] == '\0') break;
            // 模拟除以2,得到余数
            int r = divide_by_2(dec);   // dec 在函数中被更新为商
            bin_rev[idx++] = r + '0';   // 记录余数(逆序二进制位)
        }
        bin_rev[idx] = '\0';
        // 此时 bin_rev 就是原二进制逆序后的字符串,例如 "10110101"
        // 后续还需要将 bin_rev 转换成十进制大数(这一步省略,但可类似模拟)
         
int bin_rev_to_dec(char *bin_rev) {
    int len = strlen(bin_rev);
    int sum = 0;
    for (int i = len - 1, j = 0; i >= 0; i--, j++) {
        if (bin_rev[j] == '1') {
            sum += 1 << i;   // 用左移代替 pow(2,i)
        }
    }
    return sum;
}

//1 << i 等于 2 的 i 次幂


        printf("逆序二进制:%s\n", bin_rev); // 此处仅演示,实际应输出十进制逆序数
    }
    return 0;
}

赞(0)
回复给: