标题:C语言一个分解质因数的程序,我写的好像比书上还简单
只看楼主
sky2728892
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2006-9-9
 问题点数:0 回复次数:11 
C语言一个分解质因数的程序,我写的好像比书上还简单
c语言要求给出一个数,将它分解质因数。
我自己写了一个,然后根书上对照,感觉树上的有点罗唆,请各位大侠评价下吧!
这是我写的程序:
#include <stdio.h>
void main()
{
int n,i;
printf("\n Please input a number\n");
scanf("%d",&n);
printf("%d=",n);
for (i=2;i<n;)
{
if (n%i==0)
printf("%d*",i);
n=n/i;
else i++;
}
printf("%d",n);
}
这是书上的
#include <stdio.h>
void main()
{
int n,i;
printf("\n Please input a number\n");
scanf("%d",&n);
printf("%d=",n);
for (i=2;i<=n;i++)
{
while(n!=i)
{
if(n%i==0)
{
printf("%d*",i);
n=n/i;
}
else break;
}
}
printf("%d",n);
}
搜索更多相关主题的帖子: 质因数 C语言 分解 
2006-09-09 07:17
cdmalcl
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:4091
专家分:524
注 册:2005-9-23
得分:0 
顶---->楼主敢于怀疑的精神
这也说明了潭浩强是什么鸟了!
注意你程序也有一个错误:没加{}
2006-09-09 08:16
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
得分:0 
以下是引用sky2728892在2006-9-9 7:17:52的发言:
c语言要求给出一个数,将它分解质因数。
我自己写了一个,然后根书上对照,感觉树上的有点罗唆,请各位大侠评价下吧!
这是我写的程序:
#include <stdio.h>
void main()
{
int n,i;
printf("\n Please input a number\n");
scanf("%d",&n);
printf("%d=",n);
for (i=2;i<n;)
{
if (n%i==0)
{
printf("%d*",i);
n=n/i;
}
else i++;
}
printf("%d",n);
}
这是书上的
#include <stdio.h>
void main()
{
int n,i;
printf("\n Please input a number\n");
scanf("%d",&n);
printf("%d=",n);
for (i=2;i<=n;i++)
{
while(n!=i) //循环对某个质数做除法
{
if(n%i==0)
{
printf("%d*",i);
n=n/i;
}
else break;
}
}
printf("%d",n);
}

从效率上讲,你们都是一样的,从程序形式上看,你的程序较为简单,从可读性上说,书上更易于初学者理解


倚天照海花无数,流水高山心自知。
2006-09-09 09:22
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
得分:0 

/*说道分解质因子,恰巧昨天也写了个
大家看看.*/

#include<stdio.h>

typedef struct{
int data;
int flag;
}lig;

int zhishu(lig a[])//保存1000以内所有的质数
{
int i,j,k=0;

for(i=2;i<=1000;i++)
{
for(j=2;j*j<i;j++)
{
if(i%j==0)
{
break;
}
}

if(j*j>i)
{
a[k].data=i;
a[k].flag=0;
//printf("%d %d %d\n",k,a[k].data,a[k].flag);
k++;
}
}
return(k);
}

int main()
{
int i,j,num,temp,len;
lig a[250];

len=zhishu(a);
printf("输入一个(2~1000)的整数,以0结束:");
while(EOF!=(scanf("%d",&num))&&num!=0)
{
for(i=0;i<len;i++)
{
a[i].flag=0;
}
i=0;
j=0;
temp=0;
printf("%d的质因子分解式是:",num);
while(num!=1)
{
while(num%a[i].data==0)
{
a[i].flag++; //统计质因子的幂
num=num/a[i].data;
}
i++;
}

while(j<i) //打印输出质因子分解式
{
if(a[j].flag!=0)
{
if(temp==1)//控制格式
{
printf(" * ");
}
printf("%d^%d",a[j].data,a[j].flag);
temp=1;
}

j++;
}
printf("\n\n");
printf("输入一个(2~1000)的整数,以0结束:");
}
return(0);
}

[此贴子已经被作者于2006-10-6 16:32:14编辑过]


倚天照海花无数,流水高山心自知。
2006-09-09 09:35
Dee
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2006-9-4
得分:0 
真的好郁闷的哦`~! 我还是不怎么会`!  唉`~! 回去好好看下书的好~!

我是⑤个珥姛ゞ的菜鸟,但我相信总有一天我会成为⑤个珥姛ゞ的老鸟~! C爱好者加我QQ:179233339
2006-10-06 16:17
Dee
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2006-9-4
得分:0 
#include <stdio.h>
void main()
{
int n,i;
printf("\n Please input a number\n");
scanf("%d",&n);
printf("%d=",n);
for (i=2;i<n;)
{
if (n%i==0)
{
printf("%d*",i);
n=n/i;
}
else i++;
}
printf("%d",n);
}
这程序中红色字符是什么意思啊?

我是⑤个珥姛ゞ的菜鸟,但我相信总有一天我会成为⑤个珥姛ゞ的老鸟~! C爱好者加我QQ:179233339
2006-10-06 16:31
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
得分:0 

输出字符*表示乘号.


倚天照海花无数,流水高山心自知。
2006-10-06 16:34
whongxiao
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2007-9-13
得分:0 
你输入24看看两个程序输出的结果是否一样?谭老可以我的偶像哦!
2007-09-13 14:01
thecoldest
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2013-9-26
得分:0 
这是我写的一个,效率一般,易读性还是可以的
main()
{
    int i;
    printf("hello\n");
    for(;;)
    {
        int j;
        scanf("%d",&i);
        printf("1");
        for(j=2;j<=i;j++)
        {
        if (zhishu(j)&&(i%j==0))
            printf("%d,",j);
               
         }
         printf("\n");

    }

}
zhishu(x)
       int x;
{
    int l;
    for(l=2;l<=((int)sqrt(x));l=l+1)
    {

        if(x%l==0)
        {return 0;
        break; }
        else
        {}
    }
    return 1;

}
2013-09-26 22:53
askar1009
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2013-10-12
得分:0 
回复 楼主 sky2728892
if 少个 {} 还有 很多人 不注意 for 后面 没有 i++。 这个 和 书上的 while 是一个道理。 我觉得 效率 一样

[ 本帖最后由 askar1009 于 2013-10-12 18:27 编辑 ]
2013-10-12 18:20



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-88950-1-1.html




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

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