题目大意描述:
题目:固执的数??持久的数??
2014/12/06 18:41
数字乘法的持久性由 Neil Sloane定义, (Neil Sloane在一个娱乐杂志上发表关于数字持久性的文章 6, 1973, pp. 97-98., 1973),这个数经过一些步骤变成一位数反复的乘上这个数字(那个数字啊???不明白),例如
679 -> 378 -> 168 -> 48 -> 32 -> 6.(没有看懂啊)
就是说679的持久性是6,一位数持久性的结果是0,现在它是已知的有数字是11的持久性,目前尚且不知道什么是12的持久性,但是我们知道如果他们存在,那么位数至少会超过3000位。
这里需要你解决的问题是,什么是最小的数字这样计算的第一步,它的持久性结果在给定的数字?(好吧,看明白了,每一位数字之积,寻找等于这个数的最小的那个数字吧)没组测试数据输入一个不超过1000位的数字。

应该就是从最大的9开始除,一直除到1,如果最后的结果大于9那么就是不存在的了。算是贪心吧,毕竟是从最大的数字开始。可以看做是一耳光高精度运算,简单的除法。
试写代码吧。

算是1A吧,不过感觉代码写的好烂啊,不忍直视

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
#define maxn 1005
int OK, K, c[maxn];
int a[maxn];
void chu(int b[], int i, int n, int p)
{
    int j, yu=0;
    if(i==n && (b[i]==1||b[i]==0))return ;
    if(p == 1)
    {
        OK = 0;
        return ;
    }
    for(j=i; j<=n; j++)
        c[j] = b[j];
    for(j=i; j<=n; j++)
    {
        c[j] += yu * 10;
        yu = c[j] % p;
        c[j] /= p;
    }
    if(yu == 0)
    {
        a[K++] = p;
        for(j=i; c[j] == 0 && j<=n; j++);
        i=j;
        for(; j<=n; j++)
            b[j] = c[j];
        chu(b, i, n, p);
    }
    else
        chu(b, i, n, p-1);
}
int main()
{
    char s[maxn];
    while(scanf("%s", s), strcmp(s ,"-1"))
    {
        int i, n=strlen(s), b[maxn]={0};
        for(i=0; i<n; i++)
            b[i] = s[i] - '0';
        OK = 1, K=0;
        chu(b, 0, n-1, 9);
        if(n==1)
            printf("1%s\n", s);
        else if(OK)
        {
            sort(a, a+K);
            for(i=0; i<K; i++)
                printf("%d", a[i]);
            printf("\n");
        }
        else
            printf("There is no such number.\n");
    }
    return 0;
}

poj2325的更多相关文章

  1. poj2325 大数除法+贪心

    将输入的大数除以9 无法整除再除以 8,7,6,..2,如果可以整除就将除数记录,将商作为除数继续除9,8,...,3,2. 最后如果商为1 证明可以除尽 将被除过的数从小到大输出即可 #includ ...

  2. OJ题目分类

    POJ题目分类 | POJ题目分类 | HDU题目分类 | ZOJ题目分类 | SOJ题目分类 | HOJ题目分类 | FOJ题目分类 | 模拟题: POJ1006 POJ1008 POJ1013 P ...

随机推荐

  1. mybatis for .net

    MyBatis For .NET学习笔记:开篇 http://chenkai.blog.51cto.com/2023960/763806 MyBatis For .NET学习笔记[2]:配置环境 ht ...

  2. oracle行列转换总结-转载自ITPUB

    原贴地址:http://www.itpub.net/thread-1017026-1-1.html 谢谢原贴大人 最近论坛很多人提的问题都与行列转换有关系,所以我对行列转换的相关知识做了一个总结, 希 ...

  3. javascript——基本包装类型

    <script type="text/javascript"> //1.Boolean 类型 //2.Number 类型 //3.String 类型 //Boolean ...

  4. JSP中用include标签动态引入其它文件报错

    <jsp:include page="<%=path %>/include.jsp"></jsp:include> 报错:attribute f ...

  5. Html5新增加的属性

    用2中方法给单复选框增加新的特性,使直接点击文字就可以被选中 1.将选项放入label标签内添加for属性,并在input标签内添加id,两者值相同. 2.将input标签放到label标签内,注意l ...

  6. 编译内核出错:invalid option `abi=aapcs-linux' 解决办法

    出现此问题的原因是由于kernel feature中选中了Use the ARM EABIto compile the kernel引起的,有两各解决办法: 1)换编译器为arm-linux-gcc ...

  7. linux常用命令(4)rm命令

    rm是一个危险的命令,使用的时候要特别当心,尤其对于新手,否则整个系统就会毁在这个命令(比如在/(根目录)下执行rm * -rf).所以,我们在执行rm之前最好先确认一下在哪个目录,到底要删除什么东西 ...

  8. NSDictionary 使用总结

    NSDictionary使用小结 #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @ ...

  9. C++类:private、public、friend、protected的区别

           private和public的作用是让编译器帮你检查某些模块是否使用了他没权限使用的模块,也就是生成可执行代码的时候做权限检查.比如,公司里各个部门有自己私有的信息,财务部可以看所有员工 ...

  10. 蓝牙4.0BLE cc2540 usb-dongle的 SmartRF Packet Sniffer 抓取数据方法

    蓝牙4.0的开发, 现在真热火的很, 但是很多朋友买了我们出品的cc2540 usb-dongle后, 都反馈说不知道如何抓包, 并且, 即使很多朋友到TI官网论坛去找信息,不少朋友依然是无功而返,实 ...