一、前言
emmm…,我就在想虽然用数组表示各项系数的方法大大简化了多项式的计算,但最终输出的结果相对应的也只能输出一堆数字,好不美观。所以我就在网上找有没有以数组为原始数据格式化输出多项式的方法,但是似乎没有(或许是没找到,在网上看的多项式的运算绝大部分是用链表或什么模板等我没有学习过的东西做的,又有谁无聊到做这种东西呢?Σ(っ°Д°;)っ)
最后的最后,我还是用我学过的东西做了一个,我叫她多项式格式化输出器。虽然感觉代码不是很美观规范,但毕竟是自己做的 ( ̄▽ ̄)/
下面放出代码
二、代码区
- 这个多项式格式化输出器主要做了以下处理:
- 若某个项的系数为1或-1,则省略1这个数字,如:-x³ + x,而不是-1x³+1x,看起来很别扭
- 若某个项的系数为0,则该项不输出 (1与2对系数的特殊情况进行处理)
- 若某个项的次数为1,则省略1,即对次数的特殊情况进行处理。如:x 而不是 x^1
- 若某个项(不包括最高次项)的系数为正数,则输出“+”,否则输出“-”,即对项之间的符号做了处理。如:-2x -1 ,而不是 -2x + (-1)
- 这段代码使用纯逻辑编写,目前使用还没有什么bug,要注意的是最高次项的系数不能为 0
/****************************
对指数进行处理
函数参数为指数(即数组下标)
***************************/
void sign(int m) //
{
if (m == 0)
{
return;
}
else if (m == 1)
{
cout << "x";
}
else
{
cout << "x^" << m;
}
}
/****************************
对系数进行处理
函数第一个参数为系数(即数组下标对应的元素)
第二个参数用来接收信息(最后一项为0时,传参为2,否则为1)
***************************/
void coneff_1(int m,int n)
{
if (m > 0)
{
if (m != 1||n==2)
{
cout << "+" << m;
}
else
{
cout << "+";
}
return;
}
else if (m < 0)
{
if (m != -1||n==2)
{
cout << "-" << abs(m);
}
else
{
cout << "-";
}
return;
}
else
return;
}
//用于判断系数是否为0
int coneff_2(int m)
{
return m==0?1:0;
}
/**********************************
功能主体,可调用其它函数,由一段逻辑组成
第一个参数为数组(从常数项开始的系数)
第二个参数为数组元素个数
***********************************/
void print(double A[], int m)
{
int i;
for (i = m - 1; i >= 0; i--)
{
if (i == m - 1)
{
if (abs(A[i]) == 1)
{
cout << ((A[i]) > 0 ? "" : "-");
sign(i);
}
else
{
cout << (A[i] > 0 ? "" : "-") << abs(A[i]);
sign(i);
}
}
else if (i == 0)
{
if (coneff_2(A[i]))
{
cout << endl;
return;
}
else
{
coneff_1(A[i],2);
cout << endl;
}
}
else
{
if(coneff_2(A[i]))
continue;
else
{
coneff_1(A[i],1);
sign(i);
}
}
}
}