这道题连我这个蒟蒻也觉得挺简单的。
注意寻找“面罩”时的细节。
前置芝士:
当你把一个数按数位拆分时(举 $114514$ 为例),就可以分成这样:
如果设当前位在数中为第 $n$ 个数。
那么当前拆分的这位数在原数中的值为:
当前数 $\times 10^{n-1}$
AC Code:
#include<bits/stdc++.h>
#define int long long
using namespace std;
int a,b;
inline int read(){
int x=0;bool f=false;char c=getchar();
while(c<'0'||c>'9'){if(c=='-') f=true;c=getchar();}
while(c>='0'&&c<='9'){x=(x<<3)+(x<<1)+(c^'0');c=getchar();}
return f?-x:x;
}//快读。
inline int Pow(int a,int b){
int ans=1;
while(b!=0){
if(b&1)ans*=a;
a*=a;
b>>=1;
}
return ans;
}//快速幂。
signed main(){
a=read();b=read();//输入。
if(b>a){//特判。
cout<<b<<endl;//输出。
return 0;//结束程序。
}else{
for(int i=1+a;;i++){//枚举比a大的数。
int p=i,q=0,cnt=0;//p为当前数(为了不改变i的值),q为“面具”数值,cnt为一共有多少位“面具”。
while(p!=0){//每一位按照题目要求判断。
if(p%10==7){//当前位为7。
q+=7*Pow(10,cnt);//“面具”数值增加(前置芝士里说了)。
cnt++;//计数器+1。
}
if(p%10==4){//当前位为4。
q+=4*Pow(10,cnt);//“面具”数值增加(前置芝士里说了)。
cnt++;//计数器+1。
}
p/=10;//下一位。
}
if(q==b){//符合要求。
cout<<i<<endl;//输出。
return 0;//结束程序。
}
}
}
return 0;//完结撒花!
}
祝您早日AC!!!
^( ̄(oo) ̄)^