c++ 如何停止循环打印 *?

6kkfgxo0  于 2022-12-05  发布在  其他
关注(0)|答案(3)|浏览(220)

我已经创建了一个项目,打破了一个大的数字到它的根,它的工作非常好,但它打印了一个额外的 * 在最后一个根的结尾。

#include <iostream>
using namespace std;

int multinum(int a, int b);
int primeOp(int a);

int main()
{
    char ch;
    do {
        int a=0, b=0;
        multinum(a,b);
        
        cout << "\n\nDo you want to continue?(y/n)";
        cin >> ch;
    } while (ch=='y');
    
return 0;
}

int multinum(int num1, int num2)
{
    cout<< "\nPlease enter the first number : ";
    cin >> num1;
    cout << "\nPlease enter the second number : ";
    cin >> num2;

    cout << num1 <<" = ";
    primeOp(num1);
    
    cout << endl;
    
    cout << num2 <<" = ";
    primeOp(num2);

    return 0;
}

int primeOp(int a)
{
   int i, x, power;

    x=a;

    if (a%2==0)
    {
        power=0 ;
        while(a%2==0)
        {
            a/=2;
            power++;
        }

        cout << 2 <<"^"<<power<< "*";
    }

    for (i=3; i<=x/2; i+=2)
    {
        power=0 ;
        while(a%i==0)
        {
            a/=i;
            power++;
        }

        if (power!=0)
            cout << i <<"^"<< power << "*";
            
        if (power!=0 && a%i== 0)
            cout << "*";
    }

    if(a==x)
        cout<< x << "^" << 1;

    return 0;
}

我试着用不同的方法打印 ,但都没有效果,我也试着用最后一个“i”或“power”来停止打印,但没用。
我该怎么做,才能在不需要的时候停止打印 * ▲?
例如:24 = 2^3 * 3^1 * ---它应该变成:24 = 2^3
3^1

ve7v8dk2

ve7v8dk21#

在primeOp()函数中,您可以在if(power!=0 && a%i== 0)语句中添加else条件,该条件仅在幂不等于零且a可被i整除时才打印 * 符号。
更新后的primeOp()函数如下所示:

int primeOp(int a)
{
   int i, x, power;

    x=a;

    if (a%2==0)
    {
        power=0 ;
        while(a%2==0)
        {
            a/=2;
            power++;
        }

        cout << 2 <<"^"<<power<< "*";
    }

    for (i=3; i<=x/2; i+=2)
    {
        power=0 ;
        while(a%i==0)
        {
            a/=i;
            power++;
        }

        if (power!=0)
            cout << i <<"^"<< power << "*";
            
        // Add an else condition here to only print the '*' symbol
        // if the power is not equal to zero and 'a' is divisible by 'i'
        else if (power!=0 && a%i== 0)
            cout << "*";
    }

    if(a==x)
        cout<< x << "^" << 1;

    return 0;
}

进行此更改后,代码应按预期工作,并且输出末尾不应再打印额外的 * 符号。

46qrfjad

46qrfjad2#

如果不容易找到最后一张照片,请将第一张照片做得特别。
这样打印第一个幂:

cout << 2 <<"^"<<power;

然后通过以下方式打印所有剩余内容

cout << "*2^"<<power;

我不完全理解你的代码,但要知道这是第一次打印,你可以使用布尔标志。

13z8s7eq

13z8s7eq3#

您可以通过在结果末尾打印退格来避免此问题。

cout <<"\b \b";

就在return语句上方

相关问题