学习了柳神的代码,其中标记了一些重要的地方,以及解题的思路。2022年3月PAT加油呀!后期会持续更新,最后会把我刷算法的思路整合到一起!
如果大家对这道题还有更新颖的解法,可以在评论区留言,我会认真看完之后,整理到这道题目的后面的。
有需要的可以持续订阅~
1016 部分A+B (15 分)
正整数 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<109。
输出格式:
在一行中输出 PA+PB 的值。
输入样例 1:
3862767 6 13530293 3
输出样例 1:
399
输入样例 2:
3862767 1 13530293 8
输出样例 2:
0
题目大意:
a、b:要输入的数字
da、db:目标数字
pa、pb:a和b当中把它们整理到一起
最后做pa+pb,异常则输出0
写这道题的思路分析:
应该选择什么数据类型-> 如何提取题目当中给的数字 -> 输入、输出?
代码如下:
#include<iostream>
using namespace std;
int main(){
string a,b;
int da,db;
int pa=0,pb=0,cnta=0,cntb=0;//一定要赋初值
cin >> a >> da >> b >>db;//注意开口方向
for(int i=0;i<a.length();i++){
//字符串数字转化成实际数字的转换方法:
//实际数字+'0'=字符数字
if(da == (a[i]-'0'))//在判断是否等于的时候是两个等号
cnta++;
}
for(int i=0;i<b.length();i++){
if(db == (b[i]-'0'))
cntb++;
}
if(cnta !=0)//异常处理
pa = da;
if(cntb != 0)
pb = db;
for(int i=1;i<cnta;i++)
pa = pa*10+ da;
for(int i=1;i<cntb;i++)
pb = pb*10+ db;
cout << pa + pb;
return 0;
}
需要从当中学习到的:
1、对于很长的数字来说,把它写成string类型,也是一个不错的选择
2、string类——可以看作是是字符串数组
3、可以使用C语言当中的一些字符串数组的功能——a.length(); [注]:可以求出字符数组中,字符串有效长度,即不包含末尾结束符'\0'
4、字符串数字转化成实际数字的转换方法:实际数字+'0'=字符数字
.....持续补充中......