Timus Online Judge初级题目:1014. Product of Digits

这个题目看似很简单,却很容易出错,如果能够一次AC,那说明你考虑问题的方式和代码能力已经很不错了~

 

我搞了一两个小时,最后还是看到别人的提示才搞定,唉~

 

这个题目的思路是:

 

    对输入N进行10以内的因数分解,要使因数构成的数最小,则首先要使因数个数最少,因为这样以因数为数位的数的总位数最小,

 

这样,可以对N从9开始除,找一个较大因数。找到较大因数,应该把大因数放在低位,这样构成的数才最小。

 

    上面的想法很容易得到,但是写程序时一些细节方面却容易被忽略,比如当N=1和0时,

 

当N = 1,直接输出1即可;

 

当N= 0,则要输出10,这是因为在题目中要求输出的数为正数(Positive Integer).

 

代码如下:

#include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> char result[100]; int fun(int n) { int i; if (n < 10) return n; for (i = 9; i >= 2; i--) if (n % i == 0) return i; return 0; } int main() { int n = 0; int tmp = 0; int ok = 1; int i = 0; while (scanf("%d", &n) == 1) { ok = 1; i = 90; memset(result, 0, sizeof(result)); if (n == 0) { printf("10/n"); continue; } if (n < 10) { printf("%d/n", n); continue; } while (n > 1) { tmp = fun(n); if (tmp > 0) { n /= tmp; result[i] = '0' + tmp; i--; } else { ok = 0; break; } } i++; printf("%s/n", (ok)?(result+i):("-1")); } return 0; } 

你可能感兴趣的:(Integer,fun)