Lipsky

PAT 1016 部分A+B

字数统计: 381阅读时长: 1 min
2019/03/27 Share

1016 部分A+B (15 point(s))#

正整数 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:#

1
3862767 6 13530293 3

输出样例 1:#

1
399

输入样例 2:#

1
3862767 1 13530293 8

输出样例 2:#

1
0

C++一般解法#

利用 一个数字每次 \ 10 来降位,即枚举出一个数字的每一位

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <cstdio>
int main(){
long long a, b, da, db;
long long pa = 0, pb = 0;
scanf("%lld%lld%lld%lld", &a, &da, &b, &db);
while(a != 0){
if(a%10 == da){
pa = pa * 10 + da;
}
a /= 10;
}
while(b != 0){
if(b%10 == db){
pb = pb * 10 +db;
}
b /= 10;
}
printf("%lld", pa + pb);

return 0;

}

用 C++利用字符串解法#

利用 C++ 中的 string 格式存储 a,b,当 da==(a[i]-‘0’) 时,即为相等,利用 string 转换为 int 型方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
using namespace std;
int main(){
string a, b;
int da, db, pa = 0, pb = 0;
cin >> a >> da >> b >> db;
for(int i = 0; i < a.length(); i++){
if(da == (a[i]-'0')) pa = pa * 10 + da;
}
for(int i = 0; i< b.length(); i++){
if(db == (b[i]-'0')) pb = pb * 10 + db;
}
cout << pa + pb;

return 0;
}
CATALOG
  1. 1. 1016 部分A+B (15 point(s))#
  2. 2. 输入格式:#
  3. 3. 输出格式:#
  4. 4. 输入样例 1:#
  5. 5. 输出样例 1:#
  6. 6. 输入样例 2:#
  7. 7. 输出样例 2:#
  8. 8. C++一般解法#
  9. 9. 用 C++利用字符串解法#