c - 如何删除 C 程序中输出的第一个 *?

标签 c prime-factoring

我正在尝试编写一个程序来打印给定数字的质因数,但我需要打印它们并用*分隔,例如:对于输入100,输出将是: 2*2*5*5,有什么建议吗?到目前为止我已经做到了:

# include <stdio.h> 
# include <math.h> 

void decomposicao(int n) 
{ 
    printf("%d = ", n);

    while (n%2 == 0) 
    { 
        n = n/2;
        printf("* %d ", 2); 
    } 

    for (int i = 3; i <= sqrt(n); i = i+2) 
    { 
        while (n%i == 0) 
        { 
            n = n/i; 
            printf("* %d ", i);     
        } 
    } 

    if (n > 2) 
        printf ("* %d ", n); 

} 
int main() 
{ 
    int n;

    scanf("%d", &n);

    if (n<=0||n==1)     
    {   
        printf("Error", n);
    }
    else
    {
        decomposicao(n);
    }   

    return 0; 
}

对于此代码,输出为:

100 = *2*2*5*5

最佳答案

添加一个 bool 变量,告诉您是否正在打印第一个因子。

#include <stdbool.h>

void decomposicao(int n) 
{ 
    bool first = true;
    printf("%d = ", n);

    while (n%2 == 0) 
    { 
        n = n/2;
        if (!first)
            printf("* ");

        printf("%d ", 2); 
        first = false;
    } 

    for (int i = 3; i <= sqrt(n); i = i+2) 
    { 
        while (n%i == 0) 
        { 
            n = n/i; 
            if (!first)
                printf("* ");

            printf("%d ", i);
            first = false;  
        } 
    } 

    if (n > 2) {
        if (!first)
            printf("* ");

        printf ("%d ", n); 
    }
} 

关于c - 如何删除 C 程序中输出的第一个 *?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58018449/

相关文章:

c - C 中更好的断言

java - Java 数组质因数分解

c - 为什么节点的地址没有分配给结构体的自引用指针?

c - Linux 内核中的 likely()/unlikely() 宏存在段错误

java - 计算素因数的数量

java - 主保理程序只能保理 4

Python:错误的输出和 ValueError:素因数创建者

algorithm - 时间复杂度为 O(2^(n/2)) 的整数分解算法的效率如何?

c - 有一个没有定义的结构是什么意思?

c - 了解声明、malloc 和这行 C 代码的其他部分