返回首页 - Notes - 2012

判断两数相加的进位次数


问题描述

输入一个数对,以空格分隔,要求计算该数对相加时出现了多少次进位,输出进位的次数,如 123 567 有一次进位

要求可以连续多次执行计算操作,直到输入 0 0 为止


解题思路

处理的重点在于要将每次的进位值也加入计算,不能一时疏忽把进位值给丢了


问题求解

C语言

#include <stdio.h>

int account_digit (int);


int main (int argc, char* argv[]) {
    int a, b;

    while (scanf("%d%d", &a, &b) == 2) {
        if (a == 0 && b == 0) {  // 数对 0 0 退出循环
            break;
        }

        int c     = 0;                // 进位值
        int times = 0;                // 进位次数
        int len1  = account_digit(a); // 第一个数的位数
        int len2  = account_digit(b); // 第二个数的位数

        // 分别遍历两数字的数位,游标每次前移一位,只要有其中一个游标遍历完对应数字则结束循环
        for (int i = 0, j = 0; i < len1 && j < len2; ++i, ++j) {
            // 判断是否应该进位
            c = (a%10 + b%10 + c) > 9 ? 1 : 0;
            // 如果有进位则次数加1,无进位则加0
            times += c;
            // 去除最末尾的数字后继续判断
            a /= 10;
            b /= 10;
        }
        printf("%d\n", times);
    }

    return 0;
}


// 计算整数的位数
int account_digit (int num) {
    int digit = 0;
    while (num > 0) {
        ++digit;
        num /= 10;
    }
    return digit;
}

date : 2012-09-20、2014-11-24