| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5654 人关注过本帖
标题:任意整数拆成质因子的乘积:代码运行正确,但提交显示“答案错误”,请教下 ...
只看楼主 加入收藏
Redeyes
Rank: 4
来 自:中国
等 级:业余侠客
威 望:1
帖 子:301
专家分:292
注 册:2015-5-13
结帖率:86%
收藏
已结贴  问题点数:20 回复次数:10 
任意整数拆成质因子的乘积:代码运行正确,但提交显示“答案错误”,请教下各位如果代码编译正确,但在OJ上显示的是答案错误的话,一般要考虑代码的哪些方面?
题目描述
任意输入一正整数N,求出它的所有质因子。如:10=(2 5);20=(2 2 5)。
 
输入
输入只有一行,包括1个整数。
 
输出
输出只有一行.
 
样例输入
36
样例输出
2 2 3 3
程序代码:
#include<stdio.h>
int main(void)
{
    int n,i;
    if(n==1)
        printf("%d",n);
    else 
    for(i=2;i<=n;i++)
    {
        if(n%i==0)
        {
            printf("%d ",i);
            n=n/i;
            i=1;
            
        }

    }
    printf("\10\n");
}
搜索更多相关主题的帖子: 乒乓球 正整数 美国 
2016-03-02 20:02
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
收藏
得分:5 
程序代码:
#include <stdio.h>
#include <stdbool.h>

//判断素数
bool isPrime(int n)
{
    int i;

    if(n==1)  return false;

    for(i=2;i<=n/2;i++)
    {
        if(n%i==0)  return false;
    }

    return true;
}

//递归输出素数因子
void output(int n)
{
    int i,j;

    for(i=2;i<n;i++)
    {
        if(n%i==0&&isPrime(i))  break;
    }

    printf("%d ",i);

    j=n/i;

    if(isPrime(j))
    {
        printf("%d\n",j);
    }
    else
    {
        output(j);
    }
}

int main()
{
    int n;
    scanf("%d",&n);

    //输入数字本身不能是素数
    if(isPrime(n))
    {
        printf("N/A\n");
        return 0;
    }

    output(n);

    return 0;
}


[此贴子已经被作者于2016-3-2 22:35编辑过]


   唯实惟新 至诚致志
2016-03-02 21:43
拉链
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:107
专家分:534
注 册:2016-1-22
收藏
得分:3 
回复 2楼 qq1023569223
是你想复杂了,楼主的算法是对的,只要每次从2往n搜索因数,找到的因数一定是质数。目前看楼主代码里缺少被分解数的输入,即scanf(“%d”,&n)。楼主最后用\10的退格符消除空格可能未起作用,最后会导致显示格式错误。
2016-03-02 22:34
拉链
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:107
专家分:534
注 册:2016-1-22
收藏
得分:3 
经把空格换成逗号后测试,的确是printf("\10")未起到退格符的作用,下图为证:
图片附件: 游客没有浏览图片的权限,请 登录注册

代码修改如下,应该能通过测试:
程序代码:
#include<stdio.h>
int main(void)
{
    int n,i;
    scanf("%d",&n);
    for(i=2;i<n;i++)  //不需要做==1的判断,循环条件已经自动帮你过滤了,n=1和本身素数的因数就是本身
    {
        if(n%i==0)
        {
            printf("%d,",i);
            n=n/i;
            i=1;
           
        }
    }
    printf("%d\n",n);
}
2016-03-02 22:49
拉链
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:107
专家分:534
注 册:2016-1-22
收藏
得分:2 
回复 4楼 拉链
请把逗号改回成空格
2016-03-02 23:19
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
收藏
得分:1 
回复 3楼 拉链
不错,后来我想明白了。

   唯实惟新 至诚致志
2016-03-02 23:35
Redeyes
Rank: 4
来 自:中国
等 级:业余侠客
威 望:1
帖 子:301
专家分:292
注 册:2015-5-13
收藏
得分:0 
谢谢各位,我已经AC了,前面因为有些急,把sacnf误删了,感谢2楼3楼两位好友的解答,总结了代码中的两个要点,如下所示
程序代码:
#include<stdio.h>

int main(void)
{
    int n,i;
    scanf("%d",&n);
    for(i=2;i<n;i++) //i<n而不是i<=n的原因是不把1当作因数看待 
    {
        if(n%i==0)
        {
            printf("%d ",i);
            n=n/i;
            i=1; //让for 循环继续循环下去 
            
        }

    }
    printf("%d\n",n);
}

做一名健壮的技术青年,如果未来无法用代码去改变世界,还可以考虑去搬砖。
2016-03-03 01:54
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9031
专家分:54061
注 册:2011-1-18
收藏
得分:5 
以下是引用Redeyes在2016-3-3 01:54:23的发言:
如果把这一句改为 --i 算法就完美了

程序代码:
#include <stdio.h>

int main( void )
{
    unsigned n;
    scanf( "%u", &n );
    for( unsigned i=2; i<n; ++i )
    {
        if( n%i != 0 )
            continue;
        printf( "%d ", i );
        n /= i--;
    }
    printf( "%d\n", n );

    return 0;
}

2016-03-03 08:45
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9031
专家分:54061
注 册:2011-1-18
收藏
得分:1 
说的是 i=1; //让for 循环继续循环下去 这一句
不应该设为1,而应该设为i-1。
因为后面有++i,所以等于i不变
2016-03-03 08:46
路边的石子6
Rank: 1
等 级:新手上路
帖 子:4
专家分:3
注 册:2016-2-29
收藏
得分:0 
回复 8楼 rjsp
如果要解决负数输入怎么办?或者负数能拆吗?
2016-03-05 14:42
快速回复:任意整数拆成质因子的乘积:代码运行正确,但提交显示“答案错误”,请 ...
数据加载中...
 
   



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

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