poj 2325 Persistent Numbers

简单的贪心和高精度运算,主要还是要读懂题。

#include"iostream"
#include"stdio.h"
#include"string"
#include"string.h"
#include"cmath"
#define mx 5005
using namespace std;
int cnt[15];
char num[mx];
char temp[mx];
bool div(int mod)
{
    int i,j,k=0,pre=0,s;
    for(i=0;num[i]!=‘\0‘;i++)
    {
        s=pre*10+(num[i]-‘0‘);
        temp[k++]=(s/mod)+‘0‘;
        pre=s%mod;
    }
    temp[k]=‘\0‘;//一定要给字符串加上一个结束符,这个真的是非常重要的!!!
    if(pre==0)
    {
        if(temp[0]==‘0‘)
          strcpy(num,temp+1);
        else
            strcpy(num,temp);
        return true;
    }
    else
        return false;
}
int main()
{
    int i,j,k;
    while(cin>>num,strcmp(num,"-1")!=0)
    {
        memset(cnt,0,sizeof(cnt));
        if(strlen(num)==1)
        {cout<<"1"<<num<<endl;continue;}
        for(i=9;i>=2;i--)
        {
            while(div(i)) cnt[i]++;
        }
        if(strlen(num)!=1)
            cout<<"There is no such number."<<endl;
        else
        {
            for(i=2;i<=9;i++)
            {
                while(cnt[i])
                    {cout<<i;cnt[i]--;}
            }
            cout<<endl;
        }
    }
    return 0;
}

时间: 2024-10-15 17:20:52

poj 2325 Persistent Numbers的相关文章

【练习赛2补题】poj 2325 Persistent Numbers 【高精度除法+贪心】

Description The multiplicative persistence of a number is defined by Neil Sloane (Neil J.A. Sloane in The Persistence of a Number published in Journal of Recreational Mathematics 6, 1973, pp. 97-98., 1973) as the number of steps to reach a one-digit

POJ 2325 Persistent Numbers#贪心+高精度除法

(- ̄▽ ̄)-* 这道题涉及高精度除法,模板如下: char s[1005]; char division[1005];//存储进行高精度除法的数据 bool bignum_div(int x) { int tot=0,num=0; for(int i=0;s[i];i++) { num=num*10+s[i]-'0'; division[tot++]=num/x+'0'; num%=x; } division[tot]='\0';//利于进行strcpy() if(num==0) //有适合的

poj 3252 Round Numbers 【推导&#183;排列组合】

以sample为例子 [2,12]区间的RoundNumbers(简称RN)个数:Rn[2,12]=Rn[0,12]-Rn[0,1] 即:Rn[start,finish]=Rn[0,finish]-Rn[0,start-1] 所以关键是给定一个X,求出Rn[0,X] 现在假设X=10100100  这个X的二进制总共是8位,任何一个小于8位的二进制都小于X 第一部分,求出长度为[0,7]区间内的二进制是RoundNumber的个数  对于一个长度为Len的二进制(最高位为1),如何求出他的Rou

POJ 1715 Hexadecimal Numbers 组合数学

POJ 1715 Hexadecimal Numbers 组合数学 题目地址 题意: 一个十六进制,最多8位而且每一位都不能重复,求所有符合的数中第n大的数.注意不能有前导0. 分析: 可以发现,第i位的任何一个取值,都有P(unused, i - 1)个数字串,只要从高位向低位,从F到1找过去,看第n个是否在这个区间里面,如果没有的话就把那位置为0,然后找下一位就行了. 代码: /* * Author: illuz <iilluzen[at]gmail.com> * File: 1715.c

poj 1715 Hexadecimal Numbers 排列组合

1 /** 2 大意: 给定16进制数的16个字母,,求第k大的数,,要求数的长度最大为8.,并且每个数互不相同. 3 思路: 从高到低挨个枚举,每一位能组成的排列数 ,拿最高位来说,能做成的排列数为15*A(15,len-i) 4 第二位 A(14,len-2)..这样就可以找到k大的数的长度 5 接下来 .找第k大的数.同上理 ,挨个枚举每一位即可..若加上该位的排列数大于k,则该位就是这个数,继续枚举下一位 6 **/ 7 8 /** 大神思路 9 首先确定数字串的长度Len:从大到小枚举

POJ 3252 Round Numbers 数学题解

Description The cows, as you know, have no fingers or thumbs and thus are unable to play Scissors, Paper, Stone' (also known as 'Rock, Paper, Scissors', 'Ro, Sham, Bo', and a host of other names) in order to make arbitrary decisions such as who gets

POJ 3641 Pseudoprime numbers 米勒罗宾算法

链接:http://poj.org/problem?id=3641 题意:由费马小定理可得,对于素数p,a^p = a (mod p),但是对于某些非素数p,也有比较小的可能满足a^p = a (mod p),如果满足,则称p是a条件下的伪素数,现给出p,a,问p是不是a条件的伪素数. 思路:首先用米勒 罗宾判断p是不是素数,如果不是,判断a^p = a (mod p)是否成立. 代码: #include <iostream> #include <cstdio> #include

POJ 1316 Self Numbers

题目链接: http://poj.org/problem?id=1316 Description In 1949 the Indian mathematician D.R. Kaprekar discovered a class of numbers called self-numbers. For any positive integer n, define d(n) to be n plus the sum of the digits of n. (The d stands for digi

poj 3641 Pseudoprime numbers Miller_Rabin测素裸题

题目链接 题意:题目定义了Carmichael Numbers 即 a^p % p = a.并且p不是素数.之后输入p,a问p是否为Carmichael Numbers? 坑点:先是各种RE,因为poj不能用srand()...之后各种WA..因为里面(a,p) ?= 1不一定互素,即这时Fermat定理的性质并不能直接用欧拉定理来判定..即 a^(p-1)%p = 1判断是错误的..作的 #include<iostream> #include<cstdio> #include&l