zoukankan      html  css  js  c++  java
  • 【高精度加法】

    这一章主要来讲一下C++的高精度加法和乘法
    众所周知,int和longlong能存下的数据是有限的,但是我们有些数据过大的时候,连最基本的加法也无法实现。那么就必然会出现高精度的加法。但是怎么用代码实现呢?我们用竖式加减来尝试一下。
    在这里插入图片描述
    很明显,我们是从低位往高位依次累加,那么可以得到下面一个算式:
    在这里插入图片描述
    但是很明显,我们在计算中还会遇到进位。所以我们在算出每一位所对应的数值之后,还要依次从低位到高位考虑进位。最后进行输出即可。
    但是我们在代码实现中还是会遇到一些问题,接下来依次带着大家来完成代码部分。
    首先,因为两个加数可能位数特别巨大,所以我们用a,b数组分别表示两个加数,c数组表示答案。
    int a[10010],b[10010],c[20020];
    因为不能直接读取数组,所以用字符串来读入,读入之后反向打入数组中:

    string aa,bb;
    cin>>aa>>bb;
    for(int i=0;i<=aa.size()-1;i++)
    {
    	a[i]=aa[aa.size()-i-1]-'0';
    }
    for(int i=0;i<=bb.size()-1;i++)
    {
    	b[i]=bb[bb.size()-i-1]-'0';
    }
    

    反向读入的原因是后面方便计算!
    然后实现加法部分。
    由竖式可得,c[i]=a[i]+b[i];
    那么就可以写出:(后面一段是进位操作)

    for(int i=0;i<max(aa.size(),bb.size());i++)
    {
    	c[i]=a[i]+b[i];
    }
    for(int i=1;i<max(aa.size(),bb.size())+1;i++)
    {
    	c[i]+=c[i-1]/10;
    	c[i-1]%=10;
    }
    

    最后输出:

    if(c[max(aa.size(),bb.size())])cout<<c[max(aa.size(),bb.size())];
    for(int i=max(aa.size(),bb.size())-1;i>=0;i--)
    {
    	cout<<c[i];
    } 
    cout<<endl;
    

    这样就完成了整个高精度加法过程,完整代码如下:

    #include<bits/stdc++.h>
    using namespace std;
    string aa,bb;
    int a[10010],b[10010],c[20020];
    void add()
    {
    	memset(c,0,sizeof(c));
    	for(int i=0;i<max(aa.size(),bb.size());i++)
    	{
    		c[i]=a[i]+b[i];
    	}
    	for(int i=1;i<max(aa.size(),bb.size())+1;i++)
    	{
    		c[i]+=c[i-1]/10;
    		c[i-1]%=10;
    	}
    	if(c[max(aa.size(),bb.size())])cout<<c[max(aa.size(),bb.size())];
    	for(int i=max(aa.size(),bb.size())-1;i>=0;i--)
    	{
    		cout<<c[i];
    	} 
    	cout<<endl;
    	return;
    }
    int main()
    {
    	char mark;
    	cin>>aa>>bb;
    	for(int i=0;i<=aa.size()-1;i++)
    	{
    		a[i]=aa[aa.size()-i-1]-'0';
    	}
    	for(int i=0;i<=bb.size()-1;i++)
    	{
    		b[i]=bb[bb.size()-i-1]-'0';
    	}
    	add();
    	return 0;
    }
    

    ov.

    个人博客地址: www.moyujiang.com 或 moyujiang.top
  • 相关阅读:
    通用类 GetCPU 返回系统CPU占用百分比
    通用类 NVCSpecialized 序列和反序列化
    通用类 Logger 日志类
    第07组 Alpha冲刺 (1/6)(组长)
    第07组 Alpha冲刺 (5/6)(组长)
    第07组 Alpha冲刺 (6/6)(组长)
    第07组 Alpha冲刺 (2/6)(组长)
    第07组 Alpha冲刺 总结(组长)
    第07组 Alpha冲刺 (4/6)(组长)
    第07组 Alpha冲刺 (3/6)(组长)
  • 原文地址:https://www.cnblogs.com/moyujiang/p/11167771.html
Copyright © 2011-2022 走看看