PAT 1016 部分A+B (15分) C语言实现

1016 部分A+B (15分)

正整数 A 的“D​A​​ (为 1 位整数)部分”定义为由 A 中所有 D​A​​ 组成的新整数 P​A​​ 。例如:给定 A=3862767,D​A​​ =6,则 A 的“6 部分”P​A​​ 是 66,因为 A 中有 2 个 6。现给定 A、D​A​​ 、B、D​B
​​ ,请编写程序计算 P​A​​ +P​B​​ 。

输入格式:

输入在一行中依次给出 A、D​A​​ 、B、D​B​​ ,中间以空格分隔,其中 0<A,B<10​10​​ 。

输出格式:

在一行中输出 P​A​​ +P​B​​ 的值。

输入样例 1:

3862767 6 13530293 3

输出样例 1:

399

输入样例 2:

3862767 1 13530293 8

输出样例 2:

0

代码:

1.项目代码地址:https://github.com/MrHaddis/PAT1016

#include <stdio.h>
//MrHaddis
//https://github.com/MrHaddis/PAT1016

int getBase(int index);

int getResult(int base, int size, int array[]);

int main() {
    //定义两个数组去接收结果
    char numberA[10];
    char numberB[10];
    //定义两个int值 去接收值
    int dA, dB;
    //定义下标
    int indexA = 0, indexB = 0;
    //定义输出结果的数
    int result = 0;
    //定义两个接收相同数字的数组
    int resultA[10];
    int resultB[10];
    //定义两个接收进制的数字
    int tenA, tenB;
    scanf("%s %d %s %d", numberA, &dA, numberB, &dB);
    //循环获取第一个数相同的数字
    for (int i = 0; i < 10; ++i) {
        //获取到null的时候获取结束
        if (numberA[i] != '\0') {
            int num = numberA[i] - '0';
            if (dA == num) {
                resultA[indexA++] = dA;
            }
        } else {
            break;
        }
    }
    //循环获取第二个数相同的数字
    for (int i = 0; i < 10; ++i) {
        //获取到null的时候获取结束
        if (numberB[i] != '\0') {
            int num = numberB[i] - '0';
            if (dB == num) {
                resultB[indexB++] = dB;
            }
        } else {
            break;
        }
    }
    //获取两个数的进制
    tenA = getBase(indexA);
    tenB = getBase(indexB);
    //计算结果
    if (indexA > 0 && indexB > 0) {
        result = getResult(tenA, indexA, resultA) + getResult(tenB, indexB, resultB);
    } else if (indexA > 0) {
        result = getResult(tenA, indexA, resultA);
    } else if (indexB > 0) {
        result = getResult(tenB, indexB, resultB);
    } else {
        result = 0;
    }
    printf("%d", result);
    return 0;
}

/**
 * 用来计算进制的方法
 * **/
int getBase(int index) {
    int result = 1;
    for (int i = 0; i < index; ++i) {
        if (i > 0) {
            //每多一位就乘10 相当于算出数字是几位
            result *= 10;
        }
    }
    return result;
}

/**
 * 用来计算结果的方法
 * **/
int getResult(int base, int size, int array[]) {
    int result = 0;
    for (int i = 0; i < size; ++i) {
        result = result + array[i] * base;
        //每算一次 除以10 因为是从大到小算的 所以是除法不是乘法
        base /= 10;
    }
    return result;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值