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两个数的范围。所以直接用数来做也行,用字符串做也行。
之所以归类字符串处理,是因为他就是对每一位处理的来着。
总之用两种方法都可以。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// 直接用大数存 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;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// 用字符串存 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;
}

小结

简单题嘛。