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

PAT乙级真题题解目录


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

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;
}

你可能感兴趣的:(PAT乙级真题)