⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 高精度运算.cpp

📁 可以实现一些高精度
💻 CPP
字号:
//高精度运算
//--------------------------------
#include<iostream> 
#include<string>
#include<fstream> 
#include<algorithm> 
using namespace std;
// --------------------------------------------
int str_compare(string a,string b) //(1表示a>b, 0表示a=b, -1表示a<b)
 {
	int rtn;
	int aLen=a.length();
	int bLen=b.length();	
	if(aLen>bLen)
       rtn=1;
    else 
		if(aLen<bLen)
        rtn=-1;
        else    
		{
		    if(a==b)
               rtn=0 ;
		    else   
				if(a>b)
                   rtn=1;
		        else
			        if(a<b)
                       rtn=-1;
		} 
	return rtn;
} 
// -------------------------------------------------
string str_add(string a,string b)  //计算a+b
{
	string c,c1;
	int p,q;
	int i;
	int tmp;
	bool flag;
	if(a.length()<b.length())
		swap(a,b);
    p=a.length()-1;
    q=b.length()-1;
    flag=false;
    while(q>=0)   
	{
		tmp=a[p--]+b[q--]-96;
		if(flag)
			tmp++;
        flag=false;
		if(tmp>=10)
		{
			tmp-=10;
			flag=true;
        } 
        c+=char(tmp+48);
	} 
	while(p>=0)
	{
        tmp=a[p--]-48;
		if(flag)
			tmp++;
        flag=false;
		if(tmp>=10)
		{
			tmp-=10;
			flag=true;
        } 
        c+=char(tmp+48);
	} 
	if(flag)
		c+='1';
	for(i=c.length()-1;i>=0;i--)
		c1+=c[i];
	return c1;
} 
//----------------------------------------- 
string str_minus(string a,string b)  //计算a-b(a=b时没有输出任何数?)
{
    string str,rtn;
    int i;
    bool sign=true;
    if(a<b)
    {
        swap(a,b);
        sign=false;    
    }    
    int p=a.length()-1;
    int q=b.length()-1;
    while(q>=0)
    {
        if(a[p]<b[q])
        {
            str+=char(a[p]-b[q]+58);
            a[p-1]--;
        }        
        else 
            str+=char(a[p]-b[q]+48);
                
        p--;
        q--;   
    }
    while(p>=0)
    {
        if(a[p]<'0')
        {
            str+=char(a[p]+10);    
            a[p-1]--;
        }
        else 
            str+=a[p];
        p--;    
    }
    i=str.length()-1;
    while(str[i]=='0')
        i--;
    for(;i>=0;i--)
        rtn+=str[i];
    if(rtn.length()==0)
        str+='0';
    if(sign)
        return rtn;
    else 
        return "-" + rtn;
}
//----------------------------------------------------
string str_multiply(string a,string b) //计算a*b
{
	if( str_compare(a,b)==-1)
        swap(a,b);  
	string c,c1;
	string bb=b,aa=a;
	int i,j,k,bit;
	int p;
	int tmp;
    p=bb.length()-1;
	for(i=0;i<b.length();i++)
		b[i]=bb[p--];
    p=aa.length()-1;
	for(i=0;i<a.length();i++)
		a[i]=aa[p--];
	for(i=0;i<b.length();i++)
	{
		bit=0;
		for(j=0;j<a.length();j++)
		{
			if(i+j>= c.length())
                tmp=(b[i]-48)*(a[j]-48)+bit;
			else    
                tmp=(b[i]-48)*(a[j]-48)+bit+(c[i+j]-48);			
			bit=tmp/10;
            tmp=tmp%10;
			if(i+j>=c.length())
				c+=char(tmp+48);
			else
                c[i+j]=char(tmp+48);
        } 
		if(bit>0)
		{
            k=i+j;
			if(k>=c.length())
                c+=char(bit+48);
			else
			{            
				while(bit!=0)
				{
					tmp=bit+(c[k]-48);
                    bit=tmp/10;
                    tmp=tmp%10;
					if(k>=c.length())
                        c+=char(tmp+48); 
					else
                        c[k++]=char(tmp+48);
                } 
            } 
        } 
    } 
	for(i=c.length()-1;i>=0;i--)
		c1+=c[i];
	return c1;
} 
//-------------------------------------------------------- a < b 精确到100位 
string str_divide(string a,string b) //计算a/b      (除法操作有问题)
{
	string c;
	string y,tmp,tmp3;
	int i;
	int flag;
	int last;
	if(str_compare(a,b)==1)
        swap(a,b);
    a+='0';
	for(i=0;i<100;i++)
	{
		if(str_compare(a,b)==-1)
		{
			a+='0';
			c+='0';
        }
		else
		{
            c+='1';
            last=c.length()-1;
            tmp=b;
            tmp3=str_minus(a,tmp);
			while(str_compare(tmp3,b)!=-1)
			{
                tmp=str_add(tmp,b);
                c[last]++;
                tmp3=str_minus(a,tmp);
            }
			if(str_compare(tmp3,"0")==0)
                 break;
            a=tmp3;
            a+='0';
        } 
    } 
	return c;
} 
//-----------------------------------
void main()
{
	ifstream in("abc.txt");
	ofstream out("x.txt");
	string a,b;
	in>>a>>b;
	cout<<a<<endl<<b<<endl;
	cout<<str_compare(a,b)<<endl;
	cout<<str_minus(a,b)<<endl;
	cout<<str_add(a,b)<<endl;
	cout<<str_multiply(a,b)<<endl;
	cout<<a<<endl<<b<<endl;
	//cout<<str_divide(a,b)<<endl;
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -