问题 H: 部分A+B (15)
[命题人 : 外部导入]
时间限制 : 1.000 sec 内存限制 : 32 MB
题目描述
正整数A的“DA(为1位整数)部分”定义为由A中所有DA组成的新整数PA。例如:给定A = 3862767,DA = 6,则A的“6部分”PA是66,因为A中有2个6。
现给定A、DA、B、DB,请编写程序计算PA + PB。
输入
输入在一行中依次给出A、DA、B、DB,中间以空格分隔,其中0 < A, B < 1010。
输出
在一行中输出PA + PB的值。
样例输入 Copy
3862767 6 13530293 3
3862767 1 13530293 8
样例输出 Copy
399
0
代码:
#include <iostream>
using namespace std;
#define MAX 10001
int select(string a,int b){
int e[MAX];
for(int i=0;i<a.length();i++){
e[i]=a[i]-'0';
}
int result=0;
for(int i=0;i<a.length();i++){
if(e[i]==b){
result+=e[i];
result*=10;
}
}
return result/=10;
}
int main() {
string a,c;
int b,d;
while(cin>>a>>b>>c>>d){
cout<<select(a,b)+select(c,d)<<endl;
}
}
本题有一个陷阱,尽管我已经把数字转化为字符串,但是我没考虑到机器测试点中可能有全是规定的数的情况,因此第一次就WA,可是注意到题目的A、B的范围后就猜到可能会出现这种情况,即为10**10超过int数的范围,这样第二次就AC了。
效果图: