输入一个正整数n,输出一个最小正整数m,使得m的各位乘积等于n
2017-08-13 09:14
696 查看
/*
1.:编写一个函数func,输入一个正整数n,返回一个最小的正整数m,使得m的各位乘积等于n,例如输入100.输出455,输入36,输出49
*/
1.:编写一个函数func,输入一个正整数n,返回一个最小的正整数m,使得m的各位乘积等于n,例如输入100.输出455,输入36,输出49
*/
#if 0 int func(int n) { int num=0; int s; int m[10]={0}; int p=0;//数组m的下标 int sum=n; int i=2;//1~81得用两位数来表示 int q=9; bool flag=false; while(sum>9*q)//计算大于81的数应该用几位数字表示 { i++; //大于81应该使用3位数来表示 q*=9; } int r=i-1;//后面要从数组m的i-1位开始输出,记录下i-1的值 while(i)//找出满足条件的i位数 { for(int j=9;j>=1&&!flag;j--) { s=sum; if(sum%j==0) { flag=true; m[p++]=j; sum/=j; } } if(s==sum&&sum>=10) { return -1; } --i; flag=false; } for(;r>=0;r--) { num = num*10+m[r]; } return num; } int main() { int n; cout<<"请输入一个正整数n:"; cin>>n; int m = func(n); cout<<"最小正整数m各项乘积等于n:"<<m<<endl; } #endif
相关文章推荐
- 输入一个正整数n,返回一个最小正整数m(m至少是2位数),使得m的各位乘积等于n,例如输入36,输出49,输入100,输出455,对于某个n不存在这样的m,请返回-1。
- 输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
- 输入一个整数,输出所有可能的整数序列,使得序列中的整数之和等于输入的整数
- 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
- 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
- 输入一个高精度的正整数n,去掉其中任意s个数字后剩下的数字按原左右次序将组成一个新的正整数。编程对所给的n和s,寻找一种方案使得剩下的数字组成的新数最小。
- 问题描述 已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少。 输入格式 输入一个正整数N。 输出格式 输出一个整数,表示你找到的最小公倍数。 样例输入 9 样例输出 5
- 给定一个正整数x,找到一个最小的正整数y,使得y的每一位相乘,最后值等于x
- Problem Description 求n个数的最小公倍数。 Input 输入包含多个测试实例,每个测试实例的开始是一个正整数n,然后是n个正整数。 Output 为每组测试数据输出它们的最小公倍数,每个测试实例的输出占一行。你可以假设最后的输出是一个32位的整数。 Sample
- 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
- 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
- 对于一个n位正整数a,去掉其中任意k(k<=n)个数字后,剩下的数字按原次序排列可以组成一个新的正整数。设计一个删数算法,使得剩下的数字组成的正整数最小。例如,a=13243221,k=5,输出:12
- 输入一个五位以内的正整数,(1)判断它是一个几位数;(2)请按序输出其各位数字;(3)逆序输出其各位数字。
- 输入一个整数,输出所有相加等于这个数的算式
- 给定一个正整数,编写程序计算有多少对质数的和等于输入的这个正整数,并输出结果。
- 华为机试题:输入一组大于等于0的整数,从小到大排序输出,输出有连续数时,只输出连续数的最小和最大值
- 输入一个正整数数组,将它们连接起来排成一个数,输出能排出的所有数字中最小的一个
- 给定一个正整数,编写程序计算有多少对质数的和等于输入的这个正整数,并输出结果。
- 华为机试题:输入一组大于等于0的整数,从小到大排序输出,输出有连续数时,只输出连续数的最小和最大值
- 输入任意一个大于2的正整数n,输出所有小于等于n的素数