| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 957 人关注过本帖
标题:麻烦大神帮我看一下这道题代码哪里出错了?
只看楼主 加入收藏
matlab学习者
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2016-12-8
收藏
 问题点数:0 回复次数:6 
麻烦大神帮我看一下这道题代码哪里出错了?
题目内容:
每个非素数(合数)都可以写成几个素数(也可称为质数)相乘的形式,这几个素数就都叫做这个合数的质因数。比如,6可以被分解为2x3,而24可以被分解为2x2x2x3。

现在,你的程序要读入一个[2,100000]范围内的整数,然后输出它的质因数分解式;当读到的就是素数时,输出它本身。

提示:可以用一个函数来判断某数是否是素数。

输入格式:
一个整数,范围在[2,100000]内。

输出格式:
形如:
n=axbxcxd

n=n
所有的符号之间都没有空格,x是小写字母x。abcd这样的数字一定是从小到大排列的。
[code][/#include<stdio.h>
int prime( int a)
{
    int ret,k=0;
    if(a==2) {
    ret=1;} else{   
    for(int i=2;i<=a-1;i++){   
        if(a%i==0){
            ret=0;break;
        }else   k++;
        if(k>=a-2) ret=1;
    } }return ret;
}
int main(){
    int i=1,a,b,k=0,j,d;
    scanf("%d",&a);
    printf("%d=",a);
    do {
        i++;
        k=prime(i);
        j=prime(a);
        if(k) {
          while(!j&&a%i==0){
                  a=a/i;
                  j=prime(a);
                  d++;
                  if(d==1) {
                  printf("%d",i);}
                  else printf("x%d",i);
              
          }
        }
    } while(!j);
    if(d==0) {
          printf("%d",a);}
          else  printf("x%d",a);
}code]
搜索更多相关主题的帖子: include 质因数 字母 
2016-12-10 20:59
marlow
Rank: 6Rank: 6
等 级:侠之大者
威 望:2
帖 子:125
专家分:419
注 册:2016-7-18
收藏
得分:0 
#include<stdio.h>
int prime( int a)
{
    int i, ret,k=0;
    if(a==2) {
        ret=1;}
    else{   
        for(i=2;i<=a-1;i++){   
            if(a%i==0){
                ret=0;
                break;
            }else
                k++;
            if(k>=a-2)
                ret=1;
        }
    }
    return ret;
}

int main()
{
    int i=1,a,b,k=0,j,d;
   
    scanf("%d",&a);
    printf("%d=",a);
    do {
        i++;
        k=prime(i);
        j=prime(a);
        if(k) {
          while(!j&&a%i==0){
                  a=a/i;
                  j=prime(a);
                  d++;
                  if(d==1) {
                  printf("%d",i);}
                  else printf("x%d",i);
              
          }
        }
    } while(!j);
    if(d==0) {
          printf("%d",a);}
          else  printf("x%d",a);
}
// 这样可以不?是不是1也要显示出来?

一切都在学习、尝试、摸索中
2016-12-10 21:20
matlab学习者
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2016-12-8
收藏
得分:0 
回复 2楼 marlow
我刚刚测试了一下,好像也不行,可以再帮我看看吗?谢谢
2016-12-10 21:32
marlow
Rank: 6Rank: 6
等 级:侠之大者
威 望:2
帖 子:125
专家分:419
注 册:2016-7-18
收藏
得分:0 
要显示1的话,将    printf("%d=",a); 改为    printf("%d=1",a);

一切都在学习、尝试、摸索中
2016-12-10 21:32
matlab学习者
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2016-12-8
收藏
得分:0 
回复 4楼 marlow
题目要求输入的整数在2到10000之间
2016-12-10 22:07
marlow
Rank: 6Rank: 6
等 级:侠之大者
威 望:2
帖 子:125
专家分:419
注 册:2016-7-18
收藏
得分:0 
int main()
{
    int a;
   
    while(scanf("%d",&a) == 1 && a>= 2 && a <= 10000){
          int i=1,d,b,k=0,j;
 
           printf("%d=1",a);
        do {
            i++;
            k=prime(i);
            j=prime(a);
            if(k) {
              while(!j&&a%i==0){
                      a=a/i;
                      j=prime(a);
                      d++;
                      if(d==1) {
                      printf("%d",i);}
                      else printf("x%d",i);
                  
              }
            }
        } while(!j);
        if(d==0) {
              printf("%d",a);}
              else  printf("x%d",a);

    }
    return 0;
}
// 主函数改成这样吧

一切都在学习、尝试、摸索中
2016-12-10 22:23
玉郎
Rank: 1
等 级:新手上路
帖 子:3
专家分:4
注 册:2016-12-11
收藏
得分:0 
# include <stdio.h>

int prime( int a)
{
    int ret,k=0;

    if(a==2)
        ret=1;

    else
    {   
            for(int i=2;i<=a-1;i++)
            {   
                if(a%i==0)
                {
                    ret=0;
                    break;
                }
                else   k++;
                  if(k>=a-2) ret=1;
            }


    }
   
    return ret;
}

int main()
{
    int i=1,a,b,k=0,j,d=0;//原代码没有给d赋初值
    scanf("%d",&a);
    printf("%d=",a);
    do
    {
        i++;
        k=prime(i);
        j=prime(a);
        if(k)
        {
            while(!j&&a%i==0)
            {
                a=a/i;
                j=prime(a);
                d++;  //不赋初值d的值是个垃圾值。
                if(d==1)
                {
                    printf("%d",i);
                }
                else printf("x%d",i);
               
            }
        }
    } while(!j);

    if(d==0)
    {
        printf("%d",a);
    }
    else  printf("x%d",a);


    return 0;
}

//是不是输出时第一个值显示不出来啊,。试了试,这个差不多,。如果还有不对最好说具体点,好一起讨论讨论
2016-12-11 12:11
快速回复:麻烦大神帮我看一下这道题代码哪里出错了?
数据加载中...
 
   



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

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