题干:
数的分解
时间限制:1000 ms | 内存限制:65535 KB
难度:1
- 描述
你的任务是找到一个最小的正整数Q,使Q的各位数的乘积等于N。
- 输入
- 最多450组测试数据。数据以EOF结尾。
输入一个整数N(0 ≤ N ≤ 400)。 输出 - 输出Q,如果Q不存在则输出−1。 样例输入
10 5
样例输出25 5
法1:
#include<cstdio>
#include<iostream>using namespace std;int main(){int n;while(scanf("%d",&n)!=EOF){int i = 0,ge,shi,bai,qi;for(;i <= 10000 && n;i++){if(i < 10){if(i == n) break;}else if(i < 100){ge = i % 10;shi = i / 10;if(ge * shi == n)break;}else if(i < 1000){ge = i % 10;shi = (i / 10)%10;bai = i / 100;if(ge * shi * bai == n)break;}else {ge = i % 10;shi = (i / 10)%10;bai = (i / 100)%10;qi = i / 1000;if(ge * shi * bai * qi== n)break;}}if(i==10001)cout<<-1<<endl;else if(n==0)cout<<10<<endl;elsecout<<i<<endl;}return 0;
}
法2:
#include<cstdio>
#include<cstring>
#include<string>
#include<iostream>
#include<algorithm>
using namespace std;
int res[10];int main()
{int n;while(scanf("%d", &n) != EOF){memset(res, 0, sizeof(res));if(n == 0) {printf("10\n"); continue;} //易错else if(n < 10) {printf("%d\n", n); continue;}else{int tmp = n;for(int i = 9; i >= 2; ) // 统计2-9的因子个数(倒序是关键~){if(tmp % i == 0){res[i]++;tmp /= i;}elsei--;}if(tmp > 10) {printf("-1\n"); continue;}for(int i = 2; i <= 9; ++i) //从小到大输出每个因子即可for(int j = 1; j <= res[i]; ++j)printf("%d", i);printf("\n");}}return 0;
}
提炼:统计因子的模板:
int tmp = x;//用res[]数组,统计x的因子for(int i = 2; i <= 9; ) // 统计2-9的因子个数(倒序是关键~){if(tmp % i == 0){res[i]++;tmp /= i;}elsei++;}
。