比较简单的高精度。
高精度。顾名思义,就是在很大的位数情况下进行运算。(炸int)
其基本思想就是用数组进行模拟加法。
模拟近位。
最后遍历数组输出。
附上高精加,减,乘代码。
减,乘被注释。
自行取用修改
#include<bits/stdc++.h> #define tin int//个人习惯防手滑 #define itn int #define tni int #define nit int #define nti int #define pritnf printf #define scnaf scanf #define ll long long using namespace std; #define maxa 504 itn i,sa,sb,m;//sa是a的长度,我们(划掉)sb是b的长度,m是a与b中的较大长度 short x[maxa]= {0},y[maxa]= {0}; //强迫症省空间,开short。x为较长加数,y为剩下那个。x[1]、y[1]为个位,x[2]、y[2]为十位,以此类推。 string a,b; itn main() { cin>>a>>b;//cin是string最好的搭档 sa=a.size();//为以后方便取a的长度 sb=b.size();//为以后方便取b的长度 m=max(sa,sb);//为以后方便取a、b较长长度 // if(sa>sb) { //如果a是较长加数 for(i=1; i<=sa; ++i) { //把a遍历一遍 x[i]=a[sa-i]-48;//把a赋给x } for(i=1; i<=sb; ++i) { //把较短加数一位一位加上 x[i]+=b[sb-i]-48;//a一位一位加上b } } else { //上面反过来 for(i=1; i<=sb; ++i) { x[i]=b[sb-i]-48; } for(i=1; i<=sa; ++i) { x[i]+=a[sa-i]-48; } } // for(i=1; i<=m; ++i) { //十进制处理 if(x[i]>=10) { //如果需要进位 x[i]-=10;//这一位留个位 ++x[i+1];//下一位进一 } } //聪明的孩子会发现此时如999+1情况比最高位高一位的地方有个1输出时将被忽略 if(x[m+1]>0) { //最高位进位特判 ++m;//多输出一位,这样输出时就把最高处孤独的1考虑到了 } // for(i=m; i>=1; --i) { //反着输出,注意现在的m有可能已经加1,999+1不会输出000。 cout<<x[i];//一位一位 } return 0; }
总而言之,小菜鸟我就不说太多了