首页 > 代码库 > hdu4608 I-number

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