有点无聊3 2024-05-08 11:15 采纳率: 54.5%
浏览 4
已结题

用c语言分解正整数的因数

从键盘输入一个正整数(>1),然后将该整数分解为1和各个质因子的相乘,如果输入的整数本身就是质数,则应分解为1和该数本身相乘。
如:
18
1233
为什么这段代码输入18后输出1
29而不是1233,如何解决

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
    int a;
    scanf("%d", &a);
    printf("1*");
    if (a % 2 == 0)
    {
        printf("2");
        for (a; a%2==0; a=a / 2)
            printf("*");
    }
    for (int i = 3; i * i < a; i += 2)
    {
        while (a % i == 0)
        {
            printf(" % d", i);
            a = a / i;
            if (a > 1)
                printf("*");
        }
    }
    if (a > 1)
        printf("%d", a);
    return 0;
}

  • 写回答

3条回答 默认 最新

  • 笑面虎 2024-05-08 11:15
    关注

    以下内容由CHATGPT及笑面虎共同生成、有用望采纳:


    【问题概括】:这个问题的目的是编写一个C语言程序,该程序能够从键盘接收一个正整数,然后将其分解为1和它的质因数的乘积。

    【问题出现原因】:在提供的代码中,当输入18时,程序没有正确地分解出所有的质因数,而是将9作为因数打印出来,而不是3*3。这是因为在分解过程中,当一个因数被找到并打印后,程序没有正确地继续寻找下一个因数。

    【问题解决方案】:为了解决这个问题,我们需要确保在每次找到一个质因数并打印后,程序能够继续寻找并打印下一个质因数,直到该数被完全分解。

    【提供代码】:

    #define _CRT_SECURE_NO_WARNINGS
    #include<stdio.h>
    
    int main() {
        int a;
        scanf("%d", &a);
        printf("1*");
        if (a % 2 == 0) {
            printf("2");
            while (a % 2 == 0) {
                a /= 2;
                if (a > 1) printf("*");
            }
        }
        for (int i = 3; i * i <= a; i += 2) {
            while (a % i == 0) {
                printf(" %d", i);
                a /= i;
                if (a > 1) printf("*");
            }
        }
        if (a > 1) {
            printf("%d", a);
        }
        return 0;
    }
    

    【代码运行方式】:将上述代码复制到C语言的编译环境中,如Visual Studio、GCC或其他支持C语言的IDE中,编译并运行程序。程序会提示你输入一个正整数,然后输出该整数的质因数分解。

    【代码预期运行结果】:

    输入: 18
    输出: 1*2*3*3
    

    【推荐相关链接】:

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 5月16日
  • 已采纳回答 5月8日
  • 创建了问题 5月8日

悬赏问题

  • ¥15 大智慧怎么编写一个选股程序
  • ¥100 python 调用 cgps 命令获取 实时位置信息
  • ¥15 两台交换机分别是trunk接口和access接口为何无法通信,通信过程是如何?
  • ¥15 C语言使用vscode编码错误
  • ¥15 用KSV5转成本时,如何不生成那笔中间凭证
  • ¥20 ensp怎么配置让PC1和PC2通讯上
  • ¥50 有没有适合匹配类似图中的运动规律的图像处理算法
  • ¥15 dnat基础问题,本机发出,别人返回的包,不能命中
  • ¥15 请各位帮我看看是哪里出了问题
  • ¥15 vs2019的js智能提示