PAT1016部分A+B
阿新 • • 發佈:2018-12-19
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;
}