链接:1016. 部分A+B (15)
题意
分别给四个数:
一个大数A
和要找的每位数DA
, 一个大数B
和要找的每位数DB
。然后将找出来的DA, DB
分别组合成新的数PA, PB
,加起来就是答案了。
比如:A
是1646451,然后DA
是6,然后看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
| #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
| #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; }
|
小结
简单题嘛。