繁体   English   中英

如何消除从素数分解 output 中显示的额外星号?

[英]How to eliminate the extra asterisk shown from the prime factorization output?

以下代码从用户输入一个 integer (n) 并输出 n 的素数分解。 我需要有以下 output (例如),但无法达到:

输入: 98

Output: 2*7^2

实际错误的 output,其中有一个额外的“*”是:

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;
}

而不是无条件地打印它:

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

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

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

因此,根据@Jonathan Leffler 的评论,我的问题的可能解决方案之一如下:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM