A+B,A-B

学习高精度以后,便总是迷迷糊糊的,为了整理,本人决定写一下思路与过程,以方便深刻记住。

先写a+b吧。具体思路从书上了解到,是用加法竖式原理来模拟操作。还要用字符串的知识。那么

先定义两个字符串和它们每位的各个字符。

string a,b;
long long ay[256]={},by[256]={},x[300]={};//出题人良心的话long long能骗不少分
然后将a,b分别拆开并存入ay[i],by[i]中。
for(int i=1;i<=a.size();i++)
ay[i]=a[a.size()-i]-'0';//别忘了size()函数存储的是i-1项
for(int i=1;i<=b.size();i++)
by[i]=b[b.size()-i]-'0';//后面的-‘0’是个小坑
然后是计算,要将a,b的从小至大每位数相加并进位。所以上面存储数组是有要求的,必须将小位存前面。然后,用for循环解决问题,坑又来了,变量i应在什么范围之内,是个问题。我也是参考了别人的代码,才明白i只能在数据最小到最大可能之间。
for(int i=1;i<=250;i++)
{
        x[i]+=(ay[i]+by[i])%10;//将每位相加保留一位
	if(ay[i]+by[i]>=10)//判断进位
	x[i+1]+=1;
}
Now!问题来了,先在若要输出,前面会有许多0,怎么样才能解决呢?我敲了一下。
for(int i=255;i>=1;i--)
{
	if(x[i]!=0)
	sum=1;
        if(sum==1)
        cout<<x[i];
 }
很高兴,串起来打了个return 0;就提交了,结果,我还是AC了。
本人很懒,就不串了,在下面A-B中参考吧!
至于A-B,都一样,就不写了,牢记借位要逐个判断并借位,区别还是借位。至于A*B和A/B,本人还太菜,等我下几次理思路。
bye!



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值