提问者:小点点

如何消除素因子分解输出中显示的额外星号?


下面的代码从用户输入一个整数(n),并输出n的素数分解。我需要有以下输出(作为一个例子),但达不到:

输入:98

输出:2*7^2

实际错误的输出(它有一个额外的“*”)是:

2*7^2*
     ^

也许还有另外一种使用函数的解决方案,我不知道。

#include <iostream>
#include <cmath>
using namespace std;

int main()
{
    int n, countA = 0, countB = 0;
    cin>>n;
    while(n % 2 == 0)
    {
        n /= 2;
        countA++;
    }
    if(countA == 1)
        cout<<2<<"*";
    else if(countA != 0)
        cout<<2<<"^"<<countA;
    for(int i = 3; i <= sqrt(n); i = i + 2)
    {
        while(n % i == 0)
        {
            n /= i;
            countB++;
        }
        if(countB == 1)
            cout<<i<<"*";
        else if(countB != 0)
        cout<<i<<"^"<<countB<<"*";
    }
    if(n > 2)
        cout<<n;
    return 0;
}

共1个答案

匿名用户

而不是无条件打印:

cout<<i<<"^"<<countB<<"*";

你可以测试一下是不是最后一个数字。示例(应用于任何需要的地方):

for(int i = 3, end = sqrt(n); i <= end; i = i + 2) {
    // ...
    cout << i << '^' << countB;
    if(i + 2 <= end) cout << '*';