C++中資料存盤的范圍是有限的,最長的longlong型最大只能存盤2^63-1,如果要是需要存盤更大的數就只能使用陣列了,這樣存盤的數的運算需要另外撰寫程式,
這里介紹高精度加法
這種加法的運算類似于小學學習的豎式,從個位開始,逐位相加,如果大于10,則需進1,
首先我們需要先讀入資料,這里使用一個字串讀入,由于讀入時首位是最大位,而運算時需要從個位開始,再將字串反序的存盤到一個整形陣列之中,字串的存盤采用的是ASCII碼,轉換時,需要減去’0’,然后逐位相加即可,定義一個輔助變數記錄進位,最后還需反序輸出,
代碼
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=1e5;
char s1[N],s2[N];
int a[N],b[N],ans[N];
int main()
{
cin>>s1>>s2;
int len1=strlen(s1);
for(int i=1;i<=len1;i++)
a[i]=s1[len1-i]-'0'; //反序存盤
int len2=strlen(s2);
for(int i=1;i<=len2;i++)
b[i]=s2[len2-i]-'0';
int len=max(len1,len2); //長度最長的加1為答案長度
int tmp=0; //存進位
for(int i=1;i<=len+1;i++)
{
ans[i]=a[i]+b[i]+tmp;
tmp=ans[i]/10; //除10,進位
ans[i]=ans[i]%10; //模10,本位
}
if(ans[len+1]!=0)
cout<<ans[len+1]; //len+1位可能沒有
for(int i=len;i>=1;i--)
cout<<ans[i]; //反序輸出
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/259229.html
標籤:其他
上一篇:什么是資料結構
