0
点赞
收藏
分享

微信扫一扫

高精度问题

最不爱吃鱼 2022-03-15 阅读 50

减法

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=1e5+10;

int la,lb;
int r[N];
string a,b;

int main()
{
    cin>>a>>b;
    la=a.size()-1,lb=b.size()-1;
    
    if(la<lb || (la==lb && a<b))
    {
    	cout<<'-';
        swap(a,b);
        swap(la,lb);
    }
    
    if(a==b)
    {
        cout<<"0\n";
        return 0;
    }
    
    int u=0;
    memset(r,0,sizeof r);
    while(la>=0 && lb>=0)
    {
        r[u]=r[u]+(a[la]-'0')-(b[lb]-'0');
        if(r[u]<0)
        {
            r[u+1]--;     //这里r[u]本身就是负数,借位10过来刚好是相加 
            r[u]=10+r[u]; //同时因为前边已经做了交换,string a是大值,所有最后不用判断最高位是否为负
        }
        u++;
        la--;
        lb--;
    }
    
    while(la>=0)
    {
        r[u]=r[u]+(a[la]-'0');
        if(r[u]<0)
        {
            r[u+1]--;
            r[u]=10+r[u];
        }
        u++;
        la--;
    }
    
    while(u>=0 && r[u]==0) u--; //如果前边不特判a==b输出0的话,这里就要注意应该u--到 u>=1 这样才能保留最后一位0
    while(u>=0)
    {
        cout<<r[u];
        u--;
    }
    
    return 0;
}

乘法

#include<bits/stdc++.h>
using namespace std;
int r[100000];
int c[100000],d[100000];
int main()
{
	string a,b;
	cin>>a>>b;
	int la=a.size()-1,lb=b.size()-1;
	int i,j;
	for(i=la,j=0;i>=0;i--,j++) c[j]=a[i]-'0';
	for(i=lb,j=0;i>=0;i--,j++) d[j]=b[i]-'0';
	
	for(i=0;i<=la;i++)
	{
		for(j=0;j<=lb;j++)
		{
			r[i+j] += c[i]*d[j];
		}
	}
/*
我们再声明一个数组c来储存答案。大家通过一个简单的乘法运算进行模拟就可以看出,以同样的储存规则,a[0] * b[0] = c[0]; a[0] * b[1] + a[1] * b[0] = c[1];逐渐我们可以发现规律: "c[i + j] += a[i] * b[j]"同过一个循环去实现,就可以把c[i + j]计算出来,需要指出的是,这里的计算我们还没有进行进位处理。
          1   2   3
  *       5   6   7
  *--------------------------
          7   14  21
      6   12  18
 5   10   15   
*--------------------------
 5   16   34  32  21
*/	
	for(i=0;i<=la+lb+2;i++)
	{
		if(r[i]>9)
		{
			r[i+1]+=r[i]/10;
			r[i]%=10;
		}
	}
	while(r[i]==0&&i>0) i--;//i>=0的话 0*0得不出结果 
	for(j=i;j>=0;j--)
	cout<<r[j]; 
	return 0;
}

 

举报

相关推荐

高精度加法与乘法问题

高精度加法

高精度运算

高精度 部分

高精度乘法

高精度模板

高精度算法

高精度减法

0 条评论