显示由'分隔的正数的素数因子*';在c中
我试图找到正数的素数因子,并用“*”将它们分开,我的函数是有效的,有时它会打印两颗星而不是一颗星<代码>2*2**3显示由'分隔的正数的素数因子*';在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
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;
}