1. 程式人生 > >PAT乙級 1016 部分A+B

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;
}