C++ 实现根式的化简

我是实现了一个根式模板类,需要一个化简的函数。想了半天想出来了,改编成外部的函数。适用多次根式。下面是改编的一个实例。

#include <math.h>
#include <stdlib.h>
#include <iostream>
using namespace std;

bool is_square(unsigned a) //是否是平方数 
{
	return (sqrt(a) - int(sqrt(a)) == 0);
}
bool is_prime(unsigned a) //是否是质数 
{
	unsigned i=2;
	while(i < a)
	{
					//判断该数是否有公因数
		if(a % i == 0)//
			break;
		i++;
	}
	if(i==a)
		return true;
	else
		return false;
}
void simple(unsigned &out, 	//根式的系数
			unsigned &in,	//根式的内部数字
			unsigned &up) 	//根式上面的次方数
			//化简
{
	unsigned int k;
	unsigned in2 = in;
	if(is_square(in))
	{
		if(in == 0) out = 0; //里面为0,就废了它
		else 
		{
		out *= sqrt(in);
		in = 1; 				
		}
		return;
	}
	for(int i=2;i<in;i++)
	{
		if(in <= 1 )
	    	return;
		k=0;
		if(!is_prime(i))
		    continue;
 		in2 = in;
 		while(in % i == 0)
 		{
 			    	 in /= i;
 			    	 ++k;
	 	}
	 	in = in2;
	 	if(k >= up)
	 	{
	 		out *= pow(i,k / up);
	 		in /= pow(i,k - k % up);
		}
	}
}
void print(unsigned out,unsigned in,unsigned up=2)
{
		if(out != 1 || in == 1)
		   cout<<out;
		if(up  != 2)
		   cout<<"_"<<up;
	    if(in != 0 && in != 1)
		   cout<<"√"<<in;
}
int main()
{
	unsigned out,in,up=2;
	unsigned n;
	system("title 根式的化简");
	system("color 0E");
	system("mode con cols=30 lines=25");
	while(true)
	{
		out=1;
	    cout<<"输入根式内的数字:";
	    cin>>n;
	    in = n;
	    simple(out,in,up);
	    print(out,in,up);
	    cout<<"\n\n";
	}
	return 0;
}

运行效果:
在这里插入图片描述
根号就用对号代替吧…

发布了8 篇原创文章 · 获赞 1 · 访问量 1101

猜你喜欢

转载自blog.csdn.net/cjz2005/article/details/104380795