PAT Basic 1016. 部分A+B

PAT Basic 1016. 部分A+B

1. 题目描述:

正整数 \(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\)

2. 输入格式:

输入在一行中依次给出 \(A\)\(D_A\)\(B\)\(D_B\),中间以空格分隔,其中 \(0<A,B<10^9\)

3. 输出格式:

在一行中输出 \(P_A+P_B\) 的值。

4. 输入样例:

3862767 6 13530293 3
3862767 1 13530293 8

5. 输出样例:

399
0

6. 性能要求:

Code Size Limit
16 KB
Time Limit
150 ms
Memory Limit
64 MB

思路:

统计数字出现的次数,这里把数字当作字符串或是字符读入,方便进行统计。最后就是根据出现的次数构建出两个整数进行输出即可。

这里主要还是考察标准IO操作吧,这里我一开始用的代码中注释掉的scanf(),结果把输入中的空格当作字符读入了,导致输入错误,后面加了三个getchar()用于读入空格。

现在回看时发现写成scanf("%s %c%s %c", numA, &digitA, numB, &digitB);即可。

My Code:

#include <stdio.h>

int main(void)
{
    char numA[11], numB[11];
    char digitA, digitB;
    int countA = 0, countB = 0;
    int resA = 0, resB = 0;
    
    //scanf("%s%c%s%c", numA, &digitA, numB, &digitB);
    scanf("%s", numA);
    getchar(); // to consume whitespace
    scanf("%c", &digitA);
    getchar(); // to consume whitespace
    scanf("%s", numB);
    getchar(); // to consume whitespace
    scanf("%c", &digitB);
    
    
    for(int i=0; numA[i]!='\0'; i++)
    {
        if(numA[i]==digitA) countA++;
    }
    
    for(int i=0; numB[i]!='\0'; i++)
    {
        if(numB[i]==digitB) countB++;
    }
    
    while(countA)
    {
        resA = resA*10 + (digitA-'0');
        countA--;
    }
    
    while(countB)
    {
        resB = resB*10 + (digitB-'0');
        countB--;
    }
    
    printf("%d\n", resA+resB);
//     printf("%s\n", numA);
//     printf("%c\n", digitA);
//     printf("%s\n", numB);
//     printf("%c\n", digitB);
    
    return 0;
}
posted @ 2023-03-08 16:38  十豆加日月  阅读(12)  评论(0编辑  收藏  举报