PAT乙级 1016 部分A+B (15分) ---(C语言 + 数学经验 + 详细注释)

正整数 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

//本题需要一点数学思维
#include<stdio.h>
#include<math.h>
int fun(int x, int b);

int main() {
    int a, ai, b, bi;
    scanf("%d %d %d %d", &a, &ai, &b, &bi);
    int p1, p2;

    p1 = fun(a, ai);             //fun函数得到“DA部分”
    p2 = fun(b, bi);            //得到“DB部分”
    printf("%d", p1 + p2);
}

int fun(int x, int b) {
    int p, cnt;
    p = cnt = 0;
    while (x) {                          //加粗部分是典型的得到一个数每一位的代码
        if (x % 10 == b)              //如果某一位等于b,计数器cnt++
            cnt++;
        x /= 10;
    }

    return p = b * (pow(10, cnt) - 1) / 9;       //aa,bbb,cccc...类的数字都是先得到99,999,9999...再除以9然后乘以某个数字
   
}

 

发布了36 篇原创文章 · 获赞 20 · 访问量 781

猜你喜欢

转载自blog.csdn.net/qq_45472866/article/details/104068782