http://codeforces.com/contest/1355/problem/A
(1le a_1le 10^{18}),(1le kle 10^{16})。
似乎一脸不可做的样子。
但是,注意到 (mathbb{minDigit}) 可能会出现零,所以我们可以加一个小优化,当 (mathbb{minDigit}(a_n)=0) 时,就可以直接跳出了。
Code:
#include<bits/stdc++.h>
using namespace std;
long long mi(long long n) {
long long ans=10;
while(n) {
ans=min(ans,n%10);
n/=10;
}
return ans;
}//分解出 minDigit
long long ma(long long n) {
long long ans=-1;
while(n) {
ans=max(ans,n%10);
n/=10;
}
return ans;
}//分解出 maxDigit
long long t,a,k;
int main() {
scanf("%lld",&t);
while(t--) {
scanf("%lld %lld",&a,&k);
for(int i=1;i<k;i++) {
long long x=mi(a),y=ma(a);
if(x*y==0)//出现零
break;//跳掉
a+=x*y;
}
printf("%lld
",a);
}
}