高精度加法

高精度加法

高精度
首先,在c++中,有int和long long两种创建变量的形式,但是,随说long long(可以放最长的那个)可以放大的变量,但是最终仍然是有限的(最多放16位的数),然而,我们在面对更高数位时候的程序时该怎么办呢?
这时,高精度算法出现了 。 在高精度的原理中,我们要将很长无法用int 或者long long来求出来的运算通过字符串(string) 来运算,因为string可以是几乎无限的。 通过string的计数方式,我们就可以将很长的数字进行分开计算,从而做到long long等变量做不到的计算。

高精度加法
基础高精度有4中,分别是加减乘除。
在加法中,我们需要理清思路。假设是两个不超过240位的正整数,首先,我们需要两个字符串来输入变量。之后,我们可以再创建两个数组来演绎加法的过程,和一个放结果的数组!!!!注意!!!!加法的过程不是简单的加减,而是要像小学一样,从个位数开始对齐,因此,我们在输入数组的时候就需要从后往前输入,而最前面的数则放零。 在考虑到每个数位(字符串)与数组的下标有对应的比值,我们只需在每个不同的数组中找到即可。在这种“竖式计算”的里面,我们还需要注意进位的规则,即满10进1,因此,我们还需要创建变量用来推算进位,如果那个数字/10等于1的话,我们便可以放进那个进位的变量中,最后再%10即可得出进1后的余数,并放进得出结果的那个数组里面。 记住!!!!!进位变量在下一位后清零!!!
最后,我们在输出的时候,需要排除前面的数字,一个while循环即可,如果到了第一个非零数后,循环后面的位置即可。

程序例子

#include<bits/stdc++.h>
using namespace std;

string s1,s2;
int a[251],b[251],c[251],d1,d2,jw,d=1; 
int main()
{
   cin>>s1>>s2;
   d1=s1.size();
   d2=s2.size();
   for(int i=0;i<d1;i++)
     a[i+251-d1]=s1[i]-48;
   for(int i=0;i<d2;i++)
     b[i+251-d2]=s2[i]-48;
   for(int i=250;i>=1;i--)
   {
   	 c[i]=a[i]+b[i]+jw;
   	 jw=c[i]/10;
   	 c[i]%=10;
   }                                       
   while(d<250&&c[d]==0)   
     d++;
   for(int i=d;i<=250;i++)
     cout<<c[i];
   return 0;
}   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值