我试图找到正数的质因数并用“*”分隔它们,我的函数有效,有时它会打印两颗星而不是一颗。 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/