1. 程式人生 > 其它 >1016 部分A+B (15 分)

1016 部分A+B (15 分)

1016 部分A+B (15 分)

正整數 A 的“D**A(為 1 位整數)部分”定義為由 A 中所有 D**A 組成的新整數 P**A。例如:給定 A=3862767,D**A=6,則 A 的“6 部分”P**A 是 66,因為 A 中有 2 個 6。

現給定 AD**ABD**B,請編寫程式計算 P**A+P**B

輸入格式:

輸入在一行中依次給出 AD**ABD**B,中間以空格分隔,其中 0<A,B<109。

輸出格式:

在一行中輸出 P**A+P**B 的值。

輸入樣例 1:

3862767 6 13530293 3

輸出樣例 1:

399

輸入樣例 2:

3862767 1 13530293 8

輸出樣例 2:

0

思路

  1. 令PA初值均為0,列舉A中的每一位,如果該位恰好等於DA,則令PA=PA* 10+ DA。這樣當列舉完A中的每一-位之後, 就得到了PA。
  2. 同理可以得到Pb。最後輸出PA+ Pb即可。
  3. 注意點:
    1. 例如DA=6,而現在的PA=66,那麼當再次碰到A中新的6時,PA=PA* 10+DA就是PA=66* 10+6= 666,即給PA增加了一位6。
    2. 由於題目中給出的範圍是10的10次方以內,這個範圍是超過了int 的,因此需要使用long long
      來存放A和B.不過也可以用字串來儲存A和B,方法其實都是一-樣的。

參考程式碼

  1. 使用%和/來列舉一個數中的每一個數字,學習
#include<stdio.h>
int main(){
	long long a, b, da, db;
	scanf("%lld%lld%lld%lld", &a, &da, &b, &db);
	long long pa = 0, pb = 0;
	while(a != 0){
		if(a % 10 == da) pa = pa * 10 + da;//每多找到一個新的da,pa就會上升一位數*10
		a = a / 10;
	}
	while(b != 0){
		if(b % 10 == db) pb = pb * 10 + db;
		b = b / 10;
	}
	printf("%lld", pa + pb);
	return 0;
}