首页 > 代码库 > Problem 005——Digit Generator

Problem 005——Digit Generator

1583 - Digit Generator

 

For a positive integer N , the digit-sum of N is defined as the sum of N itself and its digits. When M is the digitsum of N , we call N a generator of M .

For example, the digit-sum of 245 is 256 (= 245 + 2 + 4 + 5). Therefore, 245 is a generator of 256.

Not surprisingly, some numbers do not have any generators and some numbers have more than one generator. For example, the generators of 216 are 198 and 207.

You are to write a program to find the smallest generator of the given integer.

Input 

Your program is to read from standard input. The input consists of T test cases. The number of test cases T is given in the first line of the input. Each test case takes one line containing an integer N , 1$ \le$N$ \le$100, 000 .

Output 

Your program is to write to standard output. Print exactly one line for each test case. The line is to contain a generator of N for each test case. If N has multiple generators, print the smallest. If N does not have any generators, print 0.

The following shows sample input and output for three test cases.

Sample Input 

3 216 121 2005

Sample Output 

198 0 1979

CODE
#include"stdio.h"
int main()
{
    int N;
    scanf("%d",&N);
    while(N--)
    {
        int x;
        scanf("%d",&x);
        int i,j,k,l,m,n;
        int t=x,sum=0;
        for(i=1; t/10!=0; i++)
            t=t/10;
        for(k=x-i*9; k<=x; k++)
        {
            t=k;
            for(j=1; j<=i; j++)
            {
                sum+=t%10;
                t/=10;
            }
            if(k+sum==x)
            {
                printf("%d\n",k);
                break;
            }
            sum=0;
            if(k==x)
                printf("%d\n",0);
        }
    }
    return 0;
}

My Way
这道题挺简单的,我一遍成功。
首先是输入N控制输入的样例数目,然后在进行下一步的计算。
对于这个题,最开始的想法就是穷举。
但是这样非常的浪费内存,在循环的嵌套中又容易超时,于是我不得不想另外的方法。
于是我在想,既然求这个数的生成元,那要看看这个数有几位就可以。
如果这个数有4位,那么它的生成元最多加4*9=36就能成为这个数。
那么我们只需用一个变量,来储存该数减去36的数,并以此为循环始值。
这样就大大的减少了循环运算的次数和时间。
并且,在后面计算该数每一位上的数字时也能用到这个位数。
如此,通过这个程序,就很轻松的解决掉了这个问题。
不过,我不能因为一次的顺利就得意,真正的考验还没有开始呢!
加油!!!

Problem 005——Digit Generator