显示由'分隔的正数的素数因子*';在c中

显示由'分隔的正数的素数因子*';在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; } w

我试图找到正数的素数因子,并用“*”将它们分开,我的函数是有效的,有时它会打印两颗星而不是一颗星<代码>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);
    }
}
void ft_prime(int n)
{
int i;
int-y;
i=3;
y=0;
而(n%2==0)
{
福田布尔(2);
ft_putchar('*');
y=1;
n=n/2;
}
而(i)(2)
{
ft_putchar('*');
福田布尔(北);
}
}

当你除以二以求二的倍数时,你首先把数字(2)放在后面,然后是星号。
while(i中,由于我没有其他
ft_uu
函数,我编写了一个示例,使用
putchar
,您可以尝试这样修改自己的函数

#include <stdio.h>
#include <stdbool.h>

void ft_prime(int n)
{
    int i;
    bool separated;

    separated = false;
    while (n % 2 == 0) {
        if (separated)
            putchar('*');
        putchar('2');
        n /= 2;
        separated = true;
    }

    i = 3;
    while (i <= n) {
        while (n % i == 0) {
            if (separated)
                putchar('*');
            putchar(i+'0');
            n /= i;
            separated = true;
        }
        i += 2;
    }
}

int main(void)
{
    ft_prime(12);
}

希望这有帮助。

在您的逻辑中,第一个循环:
(2*)(2*)
,第二个循环:
(*3)
, 因此,输出是
(2*)(2*)(*3)

要修改它,请更改第一个循环,使逻辑类似于(2)(*2)(*2)


在第一个循环中,先打印数字,再打印星号。在第二个循环中,先打印星号,再打印数字。第一个循环应该与第二个循环完全相同。@user3386109如果这样做,我会得到一个尾随
*
,比如
2*2*3*
添加一个条件,如果有尾随
*
,则只打印尾随
*
剩下的factors@TenTenPeter我说让第一个循环与第二个循环完全相同。检查
如果(y)
并在第一个循环中打印数字前的星号。
2*2*3
while (n % 2 == 0)
{
    if(y==1){
        ft_putchar('*');
    }
    ft_putnbr(2);
    y = 1;
    n = n / 2;
}