Есть класс Polynom
. В нем многочлен задается массивом коэффициентов. нужно вывести многочлен в консоль в виде, например, 3x^4+2x^3+1, используя String.format
.
Класс выглядит так:
public class Polynom
{
public int[] coefficients;
public int polynomDegree;
public string x;
public int[] powers;
// задать полином при помощи коэффициентов
public Polynom(params int[] coefficients)
{
this.coefficients = coefficients;
}
//свойство степени многочлена
public int PolynomDegree
{
get
{
for (int i = 0; i < coefficients.Length; i++)
{ powers[i] = i; }
return powers.Length - 1;
}
}
public override string ToString()
{
object[] args = new object[] { this.coefficients, this.powers };
return string.Format("Polynom {0}" + "x^{1}", string.Join("" + "x^", args));
}
//индексатор на чтение и запись
public int this[int index]
{
set
{
this.coefficients[index] = value;
}
get
{
return this.coefficients[index];
}
}
Так просто через string.Format()
здесь не получится, он не работает с переменным количеством аргументов.
Мой вариант с использованием StringBuilder
:
class Polynom
{
//int[] coefficients = new int[] { 1, 2, -6, 2, 3 };
...
public override string ToString()
{
var sb = new StringBuilder();
for (int i = coefficients.Length - 1; i >= 0; --i)
{
if (coefficients[i] == 0) continue;
if (coefficients[i] > 0 && sb.Length > 0) sb.Append('+');
sb.Append(coefficients[i]);
if (i > 0) sb.Append('x');
if (i > 1) sb.Append('^').Append(i);
}
return sb.ToString();
}
}
Учтено:
1. Члены с нулевым коэффициентом не выводятся.
2. Корректно отображается знак +
/-
перед коэффициентом, если старший коэффициент положительный — +
перед ним не отображается.
3. Не отображается степень при x^1
.
4. Не отображается x^0
при свободном члене.
Пример вывода: 3x^4+2x^3-6x^2+2x+1
Переопределяете метод ToString()
. Берете массив коэффициентов, собираете из них строки вида cx^i
и разворачиваете так, чтобы старший коэффициент шел первым. Добавляете костыль для 0-й степени. Примерно так:
class Polynom
{
int[] coefficients = new int[] { 1, 0, 0, 2, 3 };
public override string ToString()
{
var nonZero = String.Join(" + ",
coefficients
.Where(c => c != 0)
.Select((i, c) => $"{c}x^{i + 1}")
.Skip(1) // skip x^0
.Reverse());
return nonZero + (coefficients[0] != 0 ? " + " + coefficients[0] : "");
}
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
Есть проблемаВ файле я храню дату и в зависимости от настроек CultureInfo формат хранения в виде строки отличен