PAT乙级 1016 部分A+B

题目很简单,但是我做的感觉有点啰嗦。

正整数 A 的“D​A​​(为 1 位整数)部分”定义为由 A 中所有 D​A​​ 组成的新整数 P​A​​。

例如:给定 A=3862767,D​A​​=6,则 A 的“6 部分”P​A​​ 是 66,因为 A 中有 2 个 6。

现给定 A、D​A​​、B、D​B​​,请编写程序计算 P​A​​+P​B​​。

话说,这些题目描述些绕口,建议看他给的例子。

//1016部分A+B
#include<iostream>
using namespace std;
//传入A,DA,cDA,得到A中DA出现的次数存到cDA中
void countc(int A, int Da, int & cDa);
//传入DA,cDA,返回PA的值
int calcuP(int Da, int cDa);
int main()
{
	int A, DA, B, DB;
	int cDA = 0, cDB = 0;
	cin >> A >> DA >> B >> DB;
	int PA = 0, PB = 0;
	countc(A, DA, cDA);
	countc(B, DB, cDB);
	PA = calcuP(DA, cDA);
	PB = calcuP(DB, cDB);
	cout << PA + PB;
	return 0;
}

void countc(int A, int Da, int & cDa)
{
	while (A != 0) {
		int tm = A % 10;
		if (tm == Da) {
			cDa++;
		}
		A /= 10;
	}
}

int calcuP(int Da, int cDa) {
	if (Da == 0 || cDa == 0)
		return 0;
	int P = 0;
	for (int i = 0; i < cDa; i++) {
		P += Da;
		Da *= 10;
	}
	return P;
}

猜你喜欢

转载自blog.csdn.net/qq_41068877/article/details/84668343