PAT乙级1074. 宇宙无敌加法器(C语言)

AC

PAT乙级真题题解目录


/*
 * (可回顾 1048. 数字加密;都涉及使数字位数一致)
 * 1. 不同位数的PAT数之间如何方便相加 —— 构造相同大小的字符数组,按位数存储对应的数字
 * 2. 相加时转为数字进行运算
 * 3. 结果为0,为特殊情况,单独写输出代码
 */
#include <stdio.h>
#include <string.h>

int main() {
    char table[21], num1[21], num2[21], sum[22] = {0};
    scanf("%s %s %s", table, num1, num2);//读取进制表 和 两个PAT数 
    int base, a, b;
    int len = strlen(table), len1 = strlen(num1), len2 = strlen(num2);
    for(int i = len - 1; i >= 0; i--) {//  是否还在读取num1内容 ,是的话 将对应位的值 给 a;否则将0赋给a ,同理b 
        a = (len - i) <= len1 ? num1[len1 - (len - i)] - '0' : 0;
        b = (len - i) <= len2 ? num2[len2 - (len - i)] - '0' : 0;
        base = table[i] == '0' ? 10 : table[i] - '0';//获取进制表对应位的进制 
        sum[i+1] += a + b;
        if(sum[i+1] >= base) {
        	sum[i] += 1;
		}
        sum[i+1] %= base;
        sum[i+1] += '0';
    }
    sum[0] += '0';
    for(int i = 0; i < 22; i++) { /* find the first non-zero bit */
        if (sum[i] != 0 && sum[i] != '0') {
            printf("%s\n", sum + i);
            return 0;
        }
    } 
    printf("0\n");/* If A + B = 0, then all bits are zero */
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值