标签:
你的任务是找到一个最小的正整数Q,使Q的各位数的乘积等于N。
10 5
25 5
1 #include<stdio.h> 2 #include<iostream> 3 4 using namespace std; 5 6 int main(){ 7 int n; 8 while(scanf("%d",&n)!=EOF){ 9 10 int i = 0,ge,shi,bai,qi; 11 for(;i <= 10000 && n;i++){ 12 if(i < 10){ 13 if(i == n) 14 break; 15 } 16 else if(i < 100){ 17 ge = i % 10; 18 shi = i / 10; 19 if(ge * shi == n) 20 break; 21 } 22 else if(i < 1000){ 23 ge = i % 10; 24 shi = (i / 10)%10; 25 bai = i / 100; 26 if(ge * shi * bai == n) 27 break; 28 } 29 else { 30 ge = i % 10; 31 shi = (i / 10)%10; 32 bai = (i / 100)%10; 33 qi = i / 1000; 34 if(ge * shi * bai * qi== n) 35 break; 36 } 37 } 38 if(i==10001) 39 cout<<-1<<endl; 40 else if(n==0) 41 cout<<10<<endl; 42 else 43 cout<<i<<endl; 44 } 45 46 return 0; 47 }
1 #include<cstdio> 2 #include<cstring> 3 #include<string> 4 #include<iostream> 5 #include<algorithm> 6 using namespace std; 7 int res[10]; 8 9 int main() 10 { 11 int n; 12 while(scanf("%d", &n) != EOF) 13 { 14 memset(res, 0, sizeof(res)); 15 if(n == 0) 16 {printf("10\n"); continue;} //易错 17 else if(n < 10) 18 {printf("%d\n", n); continue;} 19 else 20 { 21 int tmp = n; 22 for(int i = 9; i >= 2; ) // 统计2-9的因子个数(倒序是关键~) 23 { 24 if(tmp % i == 0) 25 { 26 res[i]++; 27 tmp /= i; 28 } 29 else 30 i--; 31 } 32 if(tmp > 10) {printf("-1\n"); continue;} 33 for(int i = 2; i <= 9; ++i) //从小到大输出每个因子即可 34 for(int j = 1; j <= res[i]; ++j) 35 printf("%d", i); 36 printf("\n"); 37 } 38 } 39 return 0; 40 }
第二种方法比较普遍
如果一个数 N (0<=N<=1000000000),那么就要用第二种方法
数的分解 时间限制:1000 ms | 内存限制:65535 KB 难度:1
标签:
原文地址:http://www.cnblogs.com/chenzhiyuan/p/5168709.html