多项式格式化输出器

一、前言

自从做了以下两个:
多项式的加法与减法
多项式的乘法与除法

emmm…,我就在想虽然用数组表示各项系数的方法大大简化了多项式的计算,但最终输出的结果相对应的也只能输出一堆数字,好不美观。所以我就在网上找有没有以数组为原始数据格式化输出多项式的方法,但是似乎没有(或许是没找到,在网上看的多项式的运算绝大部分是用链表或什么模板等我没有学习过的东西做的,又有谁无聊到做这种东西呢?Σ(っ°Д°;)っ

最后的最后,我还是用我学过的东西做了一个,我叫她多项式格式化输出器。虽然感觉代码不是很美观规范,但毕竟是自己做的 ( ̄▽ ̄)/

下面放出代码

二、代码区

  • 这个多项式格式化输出器主要做了以下处理:
  1. 若某个项的系数为1或-1,则省略1这个数字,如:-x³ + x,而不是-1x³+1x,看起来很别扭
  2. 若某个项的系数为0,则该项不输出 (1与2对系数的特殊情况进行处理
  3. 若某个项的次数为1,则省略1,即对次数的特殊情况进行处理。如:x 而不是 x^1
  4. 若某个项(不包括最高次项)的系数为正数,则输出“+”,否则输出“-”,即对项之间的符号做了处理。如:-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);
			}
		}
	}
}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值