【PAT B1016】部分A+B(15分)

题目链接:https://pintia.cn/problem-sets/994805260223102976/problems/994805306310115328
题目分值:15分
题目类型:简单模拟

题目描述

正整数A的【D​a部分(Da是一位整数)】定义为由A中所有Da组成的新整数Pa
例如:给定 A=3862767,Da= 6,则A的【6部分】Pa是66,因为A中有2个6。
现给定 ADaBDb,请编写程序计算Pa + Pb

输入格式

输入在一行中依次给出ADaBDb,中间以空格分割,其中A B的范围是[0,10^10]

输出格式

在一行中输出Pa + Pb的值

输入样例1

3862767 6 13530293 3

输出样例1

399

输入样例2

3862767 1 13530293 8

输出样例2

0

思路分析

  • 整数范围达到了10^10,int是无法存储的
  • 整数可以使用char数组来存储,然后用逐个字符检索的办法来统计Da的个数

注意点

  • 获取字符与数字之间的关系,可以使用c-'0'

参考代码

C/C++

#include<stdio.h>
#include<string.h>
int getNum(char str[],int k)    //str表示整数A,K表示Da 
{
    int cnt = 0;    //计算整数A中有多少Da 
    int len = strlen(str);    //养成习惯,len只计算一次 
    for(int i=0;i<len;i++)
    {
        if(str[i]-'0'== k)  //检索数字字符
            cnt++; 
    }
    int ans = 0;    //返回的Pa
    for(int i=0;i<cnt;i++)
        ans = ans * 10 + k;
    return ans; 
}
int main()
{ 
    char num1[11],num2[11];
    int da,db;
    scanf("%s%d%s%d",num1,&da,num2,&db);
    int a = getNum(num1,da);
    int b = getNum(num2,db);
    printf("%d",a+b);
    return 0;
} 
文章目录