Codeforces 1143B - Nirvana

版权声明:版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/jack_jxnu/article/details/89104023

传送门:http://codeforces.com/problemset/problem/1143/B

题意:给一个数x(0<x<2e9);从0到x之间找一个数,这个数满足各位上的数乘积最大(例如894,各位数乘积为8*9*4)。输出这个最大乘积。

思路:本地暴力打表,哈哈哈,看过好多次这样的骚操作,自己还是第一次做。

打表程序:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
ll solve(ll x)
{
    int ans=1;
    while(x)
    {
        ll t=x%10;
        if(t==0) return 0;
        ans*=t;
        x/=10;
    }
    return ans;
}
int main()
{
    FILE* fp=freopen("out.txt","w",stdout);
    int sum=0,m=0;
    for(ll i=1;i<=2000000000;i++)
    {
        ll t=solve(i);
        if(t>m)
        {
            fprintf(fp,"%lld,",i);sum++;
            m=t;
        }
    }
    fprintf(fp,"%lld\n",sum);
    fclose(fp);
    return 0;
}

AC程序:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
ll a[211]={1,2,3,4,5,6,7,8,9,25,26,27,28,29,37,38,39,47,48,49,58,59,68,69,78,79,88,89,99,259,268,269,278,279,288,289,299,378,379,388,389,399,479,488,489,499,589,599,689,699,789,799,889,899,999,2599,2689,2699,2789,2799,2889,2899,2999,3789,3799,3889,3899,3999,4799,4889,4899,4999,5899,5999,6899,6999,7899,7999,8899,8999,9999,25999,26899,26999,27899,27999,28899,28999,29999,37899,37999,38899,38999,39999,47999,48899,48999,49999,58999,59999,68999,69999,78999,79999,88999,89999,99999,259999,268999,269999,278999,279999,288999,289999,299999,378999,379999,388999,389999,399999,479999,488999,489999,499999,589999,599999,689999,699999,789999,799999,889999,899999,999999,2599999,2689999,2699999,2789999,2799999,2889999,2899999,2999999,3789999,3799999,3889999,3899999,3999999,4799999,4889999,4899999,4999999,5899999,5999999,6899999,6999999,7899999,7999999,8899999,8999999,9999999,25999999,26899999,26999999,27899999,27999999,28899999,28999999,29999999,37899999,37999999,38899999,38999999,39999999,47999999,48899999,48999999,49999999,58999999,59999999,68999999,69999999,78999999,79999999,88999999,89999999,99999999,259999999,268999999,269999999,278999999,279999999,288999999,289999999,299999999,378999999,379999999,388999999,389999999,399999999,479999999,488999999,489999999,499999999,589999999,599999999,689999999,699999999,789999999,799999999,889999999,899999999,999999999};
ll solve(ll x)
{
    int ans=1;
    while(x)
    {
        ll t=x%10;
        if(t==0) return 0;
        ans*=t;
        x/=10;
    }
    return ans;
}
int main()
{
    ll x;
    int i;
    cin>>x;
    for(i=0;i<211;i++)
    {
        if(a[i]>x) break;
    }
    cout<<solve(a[i-1])<<endl;
    return 0;
}

猜你喜欢

转载自blog.csdn.net/jack_jxnu/article/details/89104023