Codeforces Round #643 A Sequence with Digits

http://codeforces.com/contest/1355/problem/A

\(1\le a_1\le 10^{18}\)\(1\le k\le 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\n",a);
	}
}

猜你喜欢

转载自www.cnblogs.com/lajiccf/p/12951602.html