PAT 1016 部分 A+B

PAT 1016
正整数A的“DA(为1位整数)部分”定义为由A中所有DA组成的新整数PA。例如:给定A = 3862767,DA = 6,则A的“6部分”PA是66,因为A中有2个6。

现给定A、DA、B、DB,请编写程序计算PA + PB。

输入格式:

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

输出格式:

在一行中输出PA + PB的值。

输入样例1:
3862767 6 13530293 3
输出样例1:
399
输入样例2:
3862767 1 13530293 8
输出样例2:
0

#include<stdio.h>    //有错误的代码
int main(void)
{
    char number_a[20]; //此处,为了方便对一个较长的数字分解成为一个个的单个数字,除了采用gets()+char num[]+(char-'0'===int)外,还可以使用while(number!=0){num[++i]=number%10; number=number/10;}的方法来对number中的数字进行枚举。
    char number_b[20];
    int  DA,DB;
    long long PA,PB;//此处,一开始认为10^10小于int的最大值(2^31-1),但是后来发现,10^10大于int的最大值,所以对于10^10不可以用int,应该用long long数据型;
    long long sum=0;
    int i;
    gets(number_a);    //此程序的输入部分有问题,因为题目输入的四个数值之间是将空格作为间隔,可以用scanf("%d %d %d %d", &-,&-,&-,&- )的形式,但是从编译的结果来看,显然用这段程序中的gets方法是不可以正确对应于题中的输入方法的(gets()输入法将'\n'也就是回车键当做输入的结束,并没有说可以将' '(空格)作为输入的结束,所以到现在的练习经历,还没有找到使用gets()来对应于A B C D格式输入的方法
    scanf("%d",&DA);   //
    gets(number_b);    //
    scanf("%d",&DB);   //
    for(i=0;i<20;++i)
    {
        if(number_a[i]-'0'==DA) 
            sum=sum*10+DA;
    }
    PA=sum;
    for(i=0,sum=0;i<20;++i)
    {
        if(number_b[i]-'0'==DB)  //此程序的核心部分没问题
            sum=sum*10+DB;
    }
    PB=sum;
    printf("%lld",PA+PB);
}
//以下为本题的解
#include<stdio.h>
int main(void)
{
    long long A,B,PA=0,PB=0;
    int DA,DB;
    scanf("%lld %d %lld %d",&A,&DA,&B,&DB);
    while(A!=0)   //这个while循环用于枚举(将一个整个数字拆解为一个一个的单个的数字的固定方法
    {
        if(A%10==DA)    
            PA=PA*10+DA;  //此代码的核心部分
        A=A/10;
    }
    while(B!=0)
    {
        if(B%10==DB)
            PB=PB*10+DB;
        B=B/10;
    }
    printf("%lld\n",PA+PB);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值