hdu4608 I-number

Posted a_clown_cz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hdu4608 I-number相关的知识,希望对你有一定的参考价值。

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4608

题意:给定一个数X,注意X是个大数,X的长度不超过1e5。

        让你求出一个Y,满足三个条件,Y>X && Y%10==0 还有就是满足以上两个条件最小的。

思路:我想的这个题的意思就是个大数加法。让X加上1~10循环试一下肯定有符合题意的。

AC代码:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int INF=0x3f3f3f3f;
const int maxn=1e5+5;

char str[maxn];
int num[maxn],a[maxn],b[maxn];

int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        cin>>str;
        int l=strlen(str);
        int sum=0;
        for(int i=0; i<l; i++)///0是最高位
            num[i]=str[i]-0;
        for(int i=0; i<l; i++)
            b[i]=num[l-1-i];    ///0是最低位
        int len;
        for(int k=1; k<=20; k++)
        {
            memset(a,0,sizeof(a));
            for(int i=0; i<l; i++)a[i]=b[i];
            len=l;
            a[0]+=k;
            for(int i=0; i<len; i++)
            {
                a[i+1]+=a[i]/10;
                a[i]%=10;

            }
            while(a[len])
            {
                a[len+1]=a[len]/10;
                a[len]%=10;
                len++;
            }
            int ans=0;
            for(int i=0; i<len; i++)
                ans+=a[i];
            if(ans%10==0) break;
        }
        for(int i=len-1; i>=0; i--)
            printf("%d",a[i]);
        puts("");
    }
    return 0;
}

 

以上是关于hdu4608 I-number的主要内容,如果未能解决你的问题,请参考以下文章

QDU-Training-01

luogu4608 [FJOI2016]所有公共子序列问题

HDU4057 Rescue the Rabbit(AC自动机+状压DP)

HDU3247 Resource Archiver(AC自动机+BFS+DP)

采购单(京东2017秋招真题)

POJ - 2778 ~ HDU - 2243 AC自动机+矩阵快速幂