#include<bits/stdc++.h>
using namespace std;
int main()
{
long long a,da,b,db;
scanf("%lld%lld%lld%lld",&a,&da,&b,&db);
long long k1=0,k2=0,pa=0,pb=0;
for(;a!=0;a/=10)
{
//cout<<111;
if(a%10==da)
{
pa+=da*(long long)round(pow(10,k1));k1++;
}
}
for(;b!=0;b/=10)
{
if(b%10==db)
{
pb+=db*(long long)round(pow(10,k2));k2++;
}
}
printf("%lld",pa+pb);
return 0;
}
这里采用四舍五入函数,因为采用pow会有误差。
误差产生原因:double pow(double x, double y) ,返回值是采用数值逼近的方法得到的double类型值。例如返回值为99.9999999时,强制类型转换发生截断,得到99。