C程序4-分解质因数

题目:将一个正整数分解质因数。例如:输入90,打印出90=233*5。

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int n,i;
    printf("请输入一个自然数:");
    scanf("%d",&n);
    printf("\n%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);
    return 0;
}

问题处理:

1、打印星号。

初始设计程序时,在打印时直接跟着数字后面,但逻辑中,在for循环内就会把所有的质因数找出来,导致最后一个数字后面会跟着星号:

.......
    for(i=2;i<=n;i++)
    {
        while(1)     
        /*此循环根据for的判断,会把最后一个质因数(n本身)也算进去*/
        {
            if(n%i==0)
            {
            printf("%d*",i);
            n=n/i;
            }
            else{break;}
        }
    }
......
}

此时,有两种思路:第一是打印形式为“星号+数字”,星号放前面,这样最后一个数字就直接结束了。但第一个数字前会打印星号,需把第一个数字从循环中摘出来。
第二就是“数字+星号”,导致的结果是最后一个数字后有星号。只需把最后一个数字从循环中摘出来即可。
考虑方便性,最后一个数字是循环后的“n”本身,易脱离循环。若想第一数字脱离循环,还需写一个确定第一个质因数的循环来确定,比较麻烦。

2、算法优化空间

质因数分解中,i肯定都是质数,但上面程序i是从2开始,逐一增加的。可考虑再次优化下。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值