【CF-1355 Sequence with Digits】

Sequence with Digits

题意

\(a_{n+1}=a_n+minDigit(a_n) \times maxDigit(a_n)\)

给出\(a_1\),和\(k\),求\(a_k\)

思路

\(k\)的范围是\(10^{18}\),肯定不会是暴力。

只要\(minDigig(a_i)==0\),就可以直接退出循环

代码

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
#include<vector>
#define pb push_back
typedef long long ll;
using namespace std;
const int inf = 0x3f3f3f3f;
const int mod = 1e9+7;
const int N = 1e6+10;

int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        ll n,k;
        scanf("%lld%lld",&n,&k);
        for(ll i=1;i<k;i++)
        {
            ll minn=inf,maxn=-inf;
            ll tmp=n;
            while(tmp)
            {
                ll now=tmp%10;
                minn=min(minn,now);
                maxn=max(maxn,now);
                tmp/=10;
            }
            n+=minn*maxn;
            if(minn==0) break;
        }
        printf("%lld\n",n);
    }
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/valk3/p/12919509.html