欢迎光临散文网 会员登陆 & 注册

P1601 A+B Problem(高精)(模板)

2023-03-16 22:27 作者:仓鼠翞  | 我要投稿

//高精度加法
//用数组存储超出存储范围内的数据
//希望两个加数的位数是一致的,两个数组的下标可以同一致的移动——补0对齐不就OK
//c[2]+=a[2]+b[2] 注意有进位一定是加等于
//c[3]=c[2]/10
//c[2]%=10
//以此循环就是逐位计算
//https://www.luogu.com.cn/problem/P1601?contestId=96607
//高精度加法(不用考虑负数)
//字符的数字转化为int型的数字 ’6‘-’0‘即可
//读入字符串-》转为数字-》加法——》消除前导零-》倒着输出
//注意要消除前导的零
#include<bits/stdc++.h>
using namespace std;
string x;
string y;
int a[10000],b[10000],c[10000],la,lb,lc;
int main()
{
   cin>>x>>y;
   la=x.length();
   lb=y.length();
   //转为对应的数字
   for(int i=0;i<la;i++)
   {
       a[la-i]=x[i]-'0';//因为顺着输入字符串需要倒着存输入的string为123则string中最低为就是1而不是3,而字符串的最低为对应这十进制数字的最高位
       //la为4即字符串下标为0123则s[0]应该对应a[4]刚好是la-i
       //                   则s[3]应该对应a[1]刚好是la-i
   }
   for(int i=0;i<lb;i++)
   {
       b[lb-i]=y[i]-'0';
   }
   lc=max(la,lb);
   for(int i=1;i<=lc;i++)
   {
       //为啥是从c的第一位开始计算捏
       //经过上述的转换十进制的数字就从下标一开始存了
       c[i]+=a[i]+b[i];//进位加两个加数
       c[i+1]=c[i]/10;//保存进位信息
       c[i]%=10;//计算c[i]位的数值
   }
   //注意循环最后一次c[lc+1]可能会大于零
   if(c[lc+1]>0) lc++;
   //倒序输出消除前导零
   for(int i=lc;i>=1;i--)
       cout<<c[i];
   return 0;
}

P1601 A+B Problem(高精)(模板)的评论 (共 条)

分享到微博请遵守国家法律