转载自:http://blog.csdn.net/lanzhihui_10086/article/details/40000371
题目描述:编写一个函数,输入一个正整数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;
- }
运行结果:
题目来自网络。