一道笔试题目

来源:互联网 发布:对于网络直播的看法 编辑:程序博客网 时间:2024/05/18 20:09

转载自:http://blog.csdn.net/lanzhihui_10086/article/details/40000371

题目描述:编写一个函数,输入一个正整数n,返回一个最小的正整数m(m至少包含两位数),使得m的各位乘积等于n,如果某个n不存在这样的m,则返回-1,

例如:

输入:12

输出:26

输入:100

输出:455

输入:7

返回:17

  1. #include<iostream>  
  2. using namespace std;  
  3.   
  4. int func(int n)  
  5. {  
  6.     int num=0;  
  7.     int s;  
  8.     int m[10]={0};  
  9.     int p=0;//数组m的下标  
  10.     int sum=n;  
  11.     int i=2;//1~81得用两位数来表示  
  12.     int q=9;  
  13.     bool falg=false;  
  14.   
  15.     while(sum>9*q)//计算大于81的数应该用几位数字表示  82~729之间用3位数表示  
  16.     {  
  17.         i++;  
  18.         q*=9;  
  19.     }  
  20.   
  21.     int r=i-1;//后面要从数组m的i-1位开始输出,记录下i-1的值  
  22.   
  23.     while(i)//找出满足条件的i位数  
  24.     {  
  25.         for(int j=9;j>=1&&!falg;j--)  
  26.         {  
  27.             s=sum;  
  28.             if(sum%j==0)  
  29.             {  
  30.                 falg=true;  
  31.                 m[p++]=j;  
  32.                 sum/=j;  
  33.             }  
  34.         }  
  35.         if(s==sum&&sum>=10)  
  36.         {  
  37.             return -1;  
  38.         }  
  39.         --i;  
  40.         falg=false;  
  41.     }  
  42.   
  43.     for(;r>=0;r--)  
  44.     {  
  45.         num=num*10+m[r];  
  46.     }  
  47.   
  48.     return num;  
  49. }  
  50.   
  51. int main()  
  52. {  
  53.     int n;  
  54.   
  55.     //for(;;)  
  56.     //{  
  57.     cin>>n;  
  58.     int sum=func(n);  
  59.     cout<<sum<<endl;  
  60.     //}  
  61.   
  62.     system("pause");  
  63.     return 0;  


运行结果:

题目来自网络。


0 0
原创粉丝点击