1016 部分A+B (15 分)
阿新 • • 發佈:2021-07-17
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。
現給定 A、D**A、B、D**B,請編寫程式計算 P**A+P**B。
輸入格式:
輸入在一行中依次給出 A、D**A、B、D**B,中間以空格分隔,其中 0<A,B<109。
輸出格式:
在一行中輸出 P**A+P**B 的值。
輸入樣例 1:
3862767 6 13530293 3
輸出樣例 1:
399
輸入樣例 2:
3862767 1 13530293 8
輸出樣例 2:
0
思路
- 令PA初值均為0,列舉A中的每一位,如果該位恰好等於DA,則令PA=PA* 10+ DA。這樣當列舉完A中的每一-位之後, 就得到了PA。
- 同理可以得到Pb。最後輸出PA+ Pb即可。
- 注意點:
- 例如DA=6,而現在的PA=66,那麼當再次碰到A中新的6時,PA=PA* 10+DA就是PA=66* 10+6= 666,即給PA增加了一位6。
- 由於題目中給出的範圍是10的10次方以內,這個範圍是超過了int 的,因此需要使用long long
來存放A和B.不過也可以用字串來儲存A和B,方法其實都是一-樣的。
參考程式碼
- 使用%和/來列舉一個數中的每一個數字,學習!
#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; }