PAT乙級1016部分A+B
阿新 • • 發佈:2018-11-04
1016 部分A+B (15 分)
正整數 A 的“DA(為 1 位整數)部分”定義為由 A 中所有 DA組成的新整數 PA 。例如:給定 A=3862767,DA=6,則 A 的“6 部分”P
A是 66,因為 A 中有 2 個 6。現給定 A、DA、B、DB,請編寫程式計算PA+PB 。
輸入格式:
輸入在一行中依次給出 A、DA、B、DB,中間以空格分隔,其中 0<A,B<10^10。
輸出格式:
在一行中輸出 PA+PB的值。
輸入樣例 1:
3862767 6 13530293 3
輸出樣例 1:
399
輸入樣例 2:
3862767 1 13530293 8
輸出樣例 2:
0
程式碼如下:
#include <iostream>
#include <map>
#include <cmath>
using namespace std;
int main()
{
string a,b;
int da,db;
long double sum=0;
cin>>a>>da>>b>>db;
map<int,int> m;
for(int i=0;i<a.size();i++){
if((a[i]-'0')==da) m[da]++;
}
for(int i=0;i<b.size();i++){
if((b[i]-'0')==db) m[db]++;
}
while(m[da]--){
sum+=da*pow(10,m[da]);
}
while(m[db]--){
sum+=db*pow(10,m[db]);
}
cout<<sum<<endl;
return 0;
}
這個題採用map容器第二個操作點始終操作超時.
這樣寫就沒有問題:
#include < iostream>
#include <cmath>
using namespace std;
int main()
{
string a,b;
int da,db,counta=0,countb=0;
long int sum=0;
cin>>a>>da>>b>>db;
for(int i=0;i<a.size();i++){
if((a[i]-'0')==da) counta++;
}
for(int i=0;i<b.size();i++){
if((b[i]-'0')==db) countb++;
}
while(counta--){
sum+=da*pow(10,counta);
}
while(countb--){
sum+=db*pow(10,countb);
}
cout<<sum<<endl;
return 0;
}