ZOJ-3143

来源:互联网 发布:sql uniom 编辑:程序博客网 时间:2024/06/05 21:57

分解因数,从9开始分解到2,然后逆序输出,因为这样保证了因数的个数最少,且组合后的数最小。。注意接收输入要用long long,我用int  WA了一次,搜了别人的代码才知道,这道题几乎没人贴代码。。最后在github找到,在此向呆滞的慢板大神致敬!!! 我用的ZOJ分类的文章应该是他写的,因为他的代码里的题目注释和文章里的题解是一样的。。每天就照着那个分类刷题,站在大神的肩膀上向前望

#include<stdio.h>#include<string.h>int factor(long long number, long long factors[], int index){    if (number < 10)    {        factors[index++] = number;        return index;    }    int i;    for (i = 9; i > 1; i--)    {        if (number % i == 0)        {            factors[index++] = i;            return factor(number / i, factors, index);        }    }    return 0;}int main(){    int n;    scanf("%d", &n);    while (n--)    {        long long number;        scanf("%lld", &number);        if (number < 10)            printf("No sequence\n");        else        {            long long factors[30];            int i, res;            memset(factors, 0, 30 * sizeof(long long));            res = factor(number, factors, 0);            if (!res)                printf("No sequence\n");            else            {                printf("%lld", number);                int count = 1;                while (res && count < 10)                {                    long long next = 0, ten = 1;                    for (i = 0; i < res; i++)                    {                        next += factors[i] * ten;                        ten *= 10;                    }                    printf(" %lld", next);                    res = factor(next, factors, 0);                    count++;                }                putchar('\n');            }        }    }    return 0;}


0 0