我是实现了一个根式模板类,需要一个化简的函数。想了半天想出来了,改编成外部的函数。适用多次根式。下面是改编的一个实例。
#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;
}
运行效果:
根号就用对号代替吧…