首先给出我自己的代码实现
#include<cstdio>
#include<cmath>
using namespace std;
int same(int num,int d)
{
int p=0;
int i=0;
while(1)
{
int temp=0;
temp=num%10;
num=(num-temp)/10;
//这道题目重点在于如何获取一个整数的各个位,这里使用求模运算每次获取各位然后更新该整数
if(temp==d)
{
p+=d*pow(10,i);
i++;
}
if(!num) break;
}
return p;
}
int main()
{
int A,Da,B,Db;
int Pa=0,Pb=0;
int sum=0;
scanf("%d%d%d%d",&A,&Da,&B,&Db);
Pa=same(A,Da);
Pb=same(B,Db);
sum=Pa+Pb;
printf("%d",sum);
}
可以改进的地方:
- same函数内部优化,if判断可以改为while循环条件
- 取每一位的方式可以更加简便一些,因为是int除法所以不需要减去末位
- 不需要用到math库里的pow函数求幂,直接按位加,每次加到新Pa(Pb)的末位(减小空间复杂度)
下面是改进的关键部分
int same(int num,int d)
{
int p=0;
while(!num)
{
if(num%10==d) p=p*10+d;
num/=10;
}
return p;
}