c - 在c中显示以 '*'分隔的正数的质因数

标签 c

我试图找到正数的质因数并用“*”分隔它们,我的函数有效,有时它会打印两颗星而不是一颗。 2*2**3

void    ft_prime(int    n)
{
    int i;
    int y;

    i = 3;
    y = 0;
    while (n % 2 == 0)
    {
        ft_putnbr(2);
        ft_putchar('*');
        y = 1;
        n = n / 2;
    }
    while (i <= ft_sqrt(n))
    {
        while(n % i == 0)
        {
            if (y)
                ft_putchar('*');
            ft_putnbr(i);
            y = 1;
            n = n / i;
        }
        i += 2;
    }
    if (n > 2)
    {
        ft_putchar('*');
        ft_putnbr(n);
    }
}

最佳答案

当您除以二求二的倍数时,您首先输入数字 (2),然后输入星号。 while (i <= ft_sqrt(n))里面用于查找其余素数,您首先打印星号,然后打印数字。

为什么你甚至有第一时间?

如果您错过了,这是一个引导性问题。 找到第一个素数并与其他素数分开的原因是您不会在第一次打印星号。 在 StackOverflow,我们不喜欢做别人的家庭作业,但这里有一条线索:

您的代码应该如下所示:

  • 找到第一个分隔符(可能是也可能不是 2)并打印出来。
  • 找到 ft_sqrt(n) 的其余分隔符(如果有的话)并打印 '*' 然后是素数。
  • 处理剩余部分并打印星号或不打印取决于您是否打印了任何东西(提示:代码中的 y 是什么?)。

好的设计需要一个函数来找到下一个分隔符。

关于c - 在c中显示以 '*'分隔的正数的质因数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37824185/

相关文章:

java - 算法,从包含 n 个元素的列表中查找组合

c - scanf() 格式字符串中尾随空格的影响是什么?

c - 动态二维数组好像要分配更多的内存

c - 在 C 中将 .csv 解析为 3d 数组

c++ - 关于将 std::less 和 std::greater 与 std::sort 一起使用的困惑

c - 如何在函数中传递结构体数组并在 C 中更改其参数

c - 为什么这个就地字符串反转函数的第一个字符没有改变?

在进程和线程之间进行选择,以及进程间(线程)通信

c - string concat C,有更好的解决方案吗?

c - 从外部摄像头捕获 OpenCV