hdu 4952 Number Transformation

题目给出一个n 一个k 

n k 小于等于10^10

i从1-k进行操作 如果n不是k的倍数 n变成大于等于k的最小的k的倍数

当i增大时,n=i*x

n1=(i+1)*x1

(i+1)*x1>=i*x

当(i+1)*(x-1)<i*x时  x1将永远是x 即i>x-1

那么就找到第一个i>x-1的x  

ans=x*k

#include<stdio.h>
#include<string.h>
int main()
{
    __int64 n,i,j,k,x,f,zz=1;
    while(scanf("%I64d%I64d",&n,&k)!=EOF)
    {
        if(n==0&&k==0) break;
        f=0;
        printf("Case #%I64d: ",zz++);
        for(i=1;i<=k;i++)
        {
            if(n%i!=0)
            {
                n=n/i+1;
                n=n*i;
            }
            x=n/i;
            if(i>x-1) {f=1;break;}
        }
    
        if(f==1) printf("%I64d\n",x*k);
        else printf("%I64d\n",n);
    }
    return 0;
}


你可能感兴趣的:(hdu 4952 Number Transformation)