PAT-B] 1016. 部分A+B [字符串处理]

链接:1016. 部分A+B (15)

题意

分别给四个数:
一个大数A和要找的每位数DA, 一个大数B和要找的每位数DB。然后将找出来的DA, DB分别组合成新的数PA, PB,加起来就是答案了。

比如:A1646451,然后DA6,然后看A里面有两个6,拼起来PA就是66啦!

同理再求出PB加起来就好了。

分析

这道题呢,由于已经给了A, B两个数的范围。所以直接用数来做也行,用字符串做也行。
之所以归类字符串处理,是因为他就是对每一位处理的来着。
总之用两种方法都可以。

代码

// 直接用大数存 A, B
#include <cstdio>

long long A, B, PA, PB;
int DA, DB;

int main()
{
    while( ~scanf( "%lld %d %lld %d", &A, &DA, &B, &DB ) ){
        PA = 0, PB = 0;
        for( ; A > 0 ; A /= 10 ){
            if( A % 10 == DA )  PA = PA * 10 + DA;
        }
        for( ; B > 0 ; B /= 10 ){
            if( B % 10 == DB )  PB = PB * 10 + DB;
        }
        printf( "%lld\n", PA + PB );
    }
    return 0;
}
// 用字符串存 A, B
#include <cstdio>

char A[105], B[105];
long long PA, PB;
int DA, DB;

int main()
{
    while( ~scanf( "%s %d %s %d", A, &DA, B, &DB ) ){
        PA = 0, PB = 0;
        for( int i = 0; A[i] != '\0' ; i++ ){
            if( A[i] - '0' == DA )  PA = PA * 10 + DA;
        }
        for( int i = 0; B[i] != '\0' ; i++ ){
            if( B[i] - '0' == DB )  PB = PB * 10 + DB;
        }
        printf( "%lld\n", PA + PB );
    }
    return 0;
}

小结

简单题嘛。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值