题目描述:编写一个函数,输入一个正整数n,返回一个最小的正整数m(m至少包含两位数),使得m的各位乘积等于n,如果某个n不存在这样的m,则返回-1,
例如:
输入:12
输出:26
输入:100
输出:455
输入:7
返回:17
#include<iostream> using namespace std; 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 falg=false; while(sum>9*q)//计算大于81的数应该用几位数字表示 82~729之间用3位数表示 { i++; q*=9; } int r=i-1;//后面要从数组m的i-1位开始输出,记录下i-1的值 while(i)//找出满足条件的i位数 { for(int j=9;j>=1&&!falg;j--) { s=sum; if(sum%j==0) { falg=true; m[p++]=j; sum/=j; } } if(s==sum&&sum>=10) { return -1; } --i; falg=false; } for(;r>=0;r--) { num=num*10+m[r]; } return num; } int main() { int n; //for(;;) //{ cin>>n; int sum=func(n); cout<<sum<<endl; //} system("pause"); return 0; }运行结果:
题目来自网络。
原文:http://blog.csdn.net/lanzhihui_10086/article/details/40000371