题目
正整数 A 的“DA(为 1 位整数)部分”定义为由 A 中所有 DA组成的新整数 PA。例如:给定 A=3862767,DA=6,则 A 的“6 部分”PA是 66,因为 A 中有 2 个 6。现给定 A、DA、B、DB,请编写程序计算 PA+PB 。
输入格式:
输入在一行中依次给出 A、DAB、DB,中间以空格分隔,其中 0<A,B<1010 。
输出格式:
在一行中输出 PA+PB的值。
输入样例 1
3862767 6 13530293 3
输出样例 1
399
输入样例 2
3862767 1 13530293 8
输出样例 2
0
分析
- 注意题给范围,0~1010,而int的范围是 -2147483648 到 2147483647。
- 所以数据类型选择long long int,在A里面DA的个数往往不止一个,所以用一个大小为10的数组来存储。
- 取某一位的数字用取余即可,然后每一次的运算中将原来的A/10,继续取余。取余的同时和DA比较,如果相等则存入数组。
- 将数组里不为零的数乘以原本所在位的单位(如10,100,100等),然后累加输出。
AC代码
#include<iostream>
using namespace std;int a[10],b[10],a1,b1;//int类型全局变量没有初始化时的默认值为0int main()
{long long int A,B;int i,j,DA,DB;cin>>A>>DA>>B>>DB;for(i=0;i<10;i++){a1=A%10;A=A/10;if(a1==DA){a[i]=a1;}b1=B%10;B=B/10;if(b1==DB){b[i]=b1;}}int sum=0,temp1=1,temp2=1;for(i=0;i<10;i++){if(a[i]!=0){sum=sum+a[i]*temp1;temp1*=10;}if(b[i]!=0){sum=sum+b[i]*temp2;temp2*=10;} }cout<<sum;return 0;
}
Reference
C++中未初始化的数组的默认值问题
有任何问题,欢迎在评论区留言,博主每天都会看的哟!
更多题解
pat 乙级 题解汇总(持续更新)(C++)