| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 830 人关注过本帖
标题:一个很短的问题
只看楼主 加入收藏
tangjingwei
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2009-11-6
收藏
 问题点数:0 回复次数:14 
一个很短的问题
一个很短的问题
时限:1000ms 内存限制:10000K  总时限:3000ms
描述:

找到最小的正整数Q,使得Q的各位数的乘积等于N

输入:

一个数 N (0<=N<=1000000000)

输出:

一个数 Q 如果不存在Q,输出-1

输入样例:

10


输出样例:

25

下面是我的代码,不知道那错了,请高手指点

#include<stdio.h>
main()
{
    int Q=2,Q1,N,a[20],i,j=0,sum=1;
    scanf("%d",&N);
    while(1)
    {
        Q1=Q;
        while(Q>0)
        {
            a[j++]=Q%10;
            Q=Q/10;
        }
        for(i=0;i<j;i++)
        {
            sum=sum*a[i];
        }
        if(sum==N)
        {
            printf("%d\n",Q1);
            break;
        }
        else Q++;
    }

}
搜索更多相关主题的帖子: 内存 include 正整数 
2010-10-19 17:47
fhqbgmqj
Rank: 2
等 级:论坛游民
帖 子:26
专家分:57
注 册:2010-5-7
收藏
得分:0 
你的程序错误好多,有些是逻辑错误,也有些大意造成的错误,你好好改改,这是我在你程序基础上改的,你看看。你是才学C语言的吗?main函数要有返回类型的,没有返回类型的写成void。

  1 #include<stdio.h>
  2
  3 int main()
  4 {  
  5     int Q = 2, Q1, N, a[20], i, j= 0, sum=1;
  6     scanf("%d",&N);
  7   
  8     while(1)
  9     {  
 10         Q1 = Q;
 11         while(Q1 > 0)
 12         {
 13             a[j++] = Q1 % 10;
 14             Q1 = Q1 / 10;
 15         }  
 16         for(i = 0; i < j; i++)
 17         {
 18             sum = sum * a[i];
 19         }  
 20         if(sum == N)
 21         {
 22             printf("%d\n",Q);
 23             return 0;
 24         }  
 25         else
 26         {
 27             Q++;
 28             sum = 1;
 29             j = 0;
 30         }  
 31     }  
 32   
 33     return 0;
 34 }  


这个程序我用65536测试了些,我电脑上运行时间是:
65536
288888
real    0m2.145s
user    0m0.028s
sys    0m0.000s
时间很短就算出了结果。

[ 本帖最后由 fhqbgmqj 于 2010-10-19 19:18 编辑 ]
2010-10-19 19:15
troy0215
Rank: 2
等 级:论坛游民
帖 子:16
专家分:71
注 册:2009-5-22
收藏
得分:0 
#include<stdio.h>
main()
{
    int Q=2,Q1,N,a[20],i,j=0,sum=1;
    scanf("%d",&N);
    while(1)
    {
        Q1=Q;
        while(Q>0)
        {
            a[j++]=Q%10;
            Q=Q/10;
        }
        for(i=0;i<j;i++)
        {
            sum=sum*a[i];
        }
        if(sum==N)
        {
            printf("%d\n",Q1);
            break;
        }
        else
        {
              Q=Q1+1;
              sum=1;
              j=0;
        }
    }
    getchar();
    getchar();
}
只是把你的错误修改了一下,对不对就不知道了~
2010-10-19 19:25
m21wo
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:4
帖 子:440
专家分:1905
注 册:2010-9-23
收藏
得分:0 
程序代码:
#include<stdio.h>
int main()
{
    int Q1=2,Q,N,a[20];
    scanf("%d",&N);
    while(1)
    {
        int j=0,sum=1;
        Q=Q1;
        while(Q>0)
        {
            a[j++]=Q%10;
            Q=Q/10;
        }
        for(int i=0;i<j;i++)
        {
            sum=sum*a[i];
        }
        if(sum==N)
        {
            printf("%d\n",Q1);
            break;
        }
        Q1++;
    }

} 
好了!呵呵

If You Want Something, Go Get It, Period.
2010-10-19 20:44
日的起烟烟
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:137
专家分:129
注 册:2010-2-27
收藏
得分:0 
有没有更高效的算法啊

2010-10-19 20:55
日的起烟烟
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:137
专家分:129
注 册:2010-2-27
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册


程序卡主了一直不动啊···

这个代码不符合要求哦
2010-10-19 22:03
sunmingchun
Rank: 4
来 自:安徽-滁州
等 级:业余侠客
帖 子:198
专家分:277
注 册:2010-4-2
收藏
得分:0 


不知道是我的问题还是程序的问题,我打印你的程序没结果。还有你的i的这样定义行吗?我的编译器怎么错误呢!不知道你的行吗?

[ 本帖最后由 sunmingchun 于 2010-10-19 22:14 编辑 ]
2010-10-19 22:10
日的起烟烟
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:137
专家分:129
注 册:2010-2-27
收藏
得分:0 
程序的算法效率太底了···

这个是穷举的算法··没有进行过优化的··

太恐怖了····

我都想到一个好办法了··现在正在调试···



上面的程序···当输入的数没有可以能的情况存在的时候··比如输入2位的素数···

那么sum 永远不会等于 N  这个时候Q无限增加··Q1一直>0··看是无限循环··

但是当Q溢出的时候···Q1<0··然后内循环退出···

但是最外层还有一个while(1);

所以····我无语了··





[ 本帖最后由 日的起烟烟 于 2010-10-19 22:58 编辑 ]
2010-10-19 22:47
tangjingwei
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2009-11-6
收藏
得分:0 
回复 7楼 sunmingchun
程序的问题
2010-10-19 23:32
tangjingwei
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2009-11-6
收藏
得分:0 
回复 8楼 日的起烟烟
静候佳音
2010-10-19 23:32
快速回复:一个很短的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020741 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved