Небольшая проблема с выравниванием чисел по правому краю. C++

У меня есть последовательность чисел, которая разбивается на строки. Кол-во строк зависит от кол-ва чисел(выбирается рандомно в диапазоне от 1 до 10) в одной строке. И все эти числа нужно выровнять по правому краю. Я узнал, как это реализовать - с помощью setw(). Но у меня некорректно выравниваются числа. В чем ошибка, подскажите, пожалуйста.

Код C++:

    #include <iostream>
    #include <iomanip>
    #include <string>
    #include <cmath>
    #include <ctime>
    #include <fstream>
    #include <iomanip>
    
    using namespace std;
    
    void Number1(int n, int m)
    {
    
        int x = n / m;
        int y = n % m;
    
        if (y == 0) {
            for (int i = 0; i < x; ++i)
            {
                cout << endl;
                for (int j = 0; j < m; ++j)
                {
                    cout << setw(230) << rand() % 201 - 100 << " ";
                }
            }
        }
        else {
            for (int i = 0; i < x; ++i)
            {
                cout << endl;
                for (int j = 0; j < m; ++j)
                {
                    cout << setw(230) << rand() % 201 - 100 << " ";
                }
            }
            cout << endl;
            for (int k = 0; k < y; k++)
            {
                cout << setw(230) << rand() % 201 - 100 << " ";
            }
            cout << endl;
        }
    }

int main()
{
    setlocale(LC_ALL, "Russian");
    srand(time(0));

    //Number1
    int n;
    cout << "Введите кол-во чисел = ";
    cin >> n;
    cout << endl;

    int m = rand() % 11;
    cout << "Кол-во чисел в строке = " << m << endl;
    cout << endl;

    Number1(n, m);
}

Скриншот результата: введите сюда описание изображения

Они как-то косо расположены :(


Ответы (2 шт):

Автор решения: Давид Шамсани
void Number1(int n, int m)
{

    int x = n / m;
    int y = n % m;

    if (y == 0) {
        for (int i = 0; i < x; ++i)
        {
            cout << endl;
            for (int j = 0; j < m; ++j)
            {
                cout << setw(230) << rand() % 201 - 100 << endl;
            }
        }
    }
    else {
            for (int j = 0; j < m; ++j)
            {
                cout << setw(230) << rand() % 201 - 100 << endl;
            }
        cout << endl;
        for (int k = 0; k < y; k++)
        {
            cout << setw(230) << rand() % 201 - 100 << endl;
        }
        cout << endl;
    }
}
→ Ссылка
Автор решения: bipll
std::ostringstream line;
for (int j = 0; j < m; ++j) {
    line << (j? " " : "") << rand() % 201 - 100;
}
std::cout << std::setw(230) << line.str() << '\n';

(j? " " : ""), в принципе, можно заменить на один безусловный пробел, это я уж для красоты добавил.

→ Ссылка