C++U7-1-高精度加减
学习目标
高精度加法
[高精度加法]
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include<bits/stdc++.h> using namespace std; int main(){ string a; string b; int c[10089]={0}; int d[10089]={0}; int e[10089]={0}; cin>>a>>b; int l1 = a.size() , l2 = b.size(); for(int i=0;i<l1;i++){ c[i]=a[l1-i-1]-'0'; } for(int i=0;i<l2;i++){ d[i]=b[l2-i-1]-'0'; } int l=max(l1,l2),jw=0; for(int i=0;i<l;i++){ e[i]=c[i]+d[i]+jw; if(e[i]>9){ e[i]-=10; jw=1; }else{ jw=0; } } if(jw) cout<<1; for(int i=0;i<l;i++){ cout<<e[l-i-1]; } return 0; }
高精度减法
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include<bits/stdc++.h> using namespace std; int main(){ string s1,s2; cin >> s1 >> s2; if(s2.size() > s1.size() || s1.size() == s2.size() && s1 < s2) { swap(s1,s2); cout << "-"; } int l1 = s1.size(),l2 = s2.size(); int a1[10001] = {0},a2[10001] = {0},c[10001] = {0}; for(int i = 0; i < l1 ; i++){ a1[i] = s1[l1-i-1] - '0'; } for(int i = 0; i < l2 ; i++){ a2[i] = s2[l2-i-1] - '0'; } for(int i = 0;i < l1 ;i++){ c[i] = a1[i] - a2[i]; if(c[i] < 0){ c[i] += 10; a1[i + 1] -= 1; } } while(c[l1] == 0 && l1 > 0) { //去零 l1-- ; } while(l1 >= 0){ //倒序输出 cout << c[l1--]; } return 0; }
[数楼梯]高精度版本
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include<bits/stdc++.h> using namespace std; int n , f[5010][5010] , len; void jiafa(int k)//高精加法 { for(int i = 1; i <= len; i++){ f[k][i] = f[k-1][i] + f[k-2][i]; }//两数相加 for(int i = 1; i <= len; i++){//进位 if(f[k][i] >= 10){ f[k][i+1] += f[k][i] / 10; f[k][i] %= 10; if(f[k][len+1] > 0){ len++; } } } } int main(){ cin >> n; len = 1; f[1][1] = 1;//预处理 f[2][1] = 2;//预处理 for(int i = 3; i <= n; i++){ jiafa(i); }//开始计算 for(int i = len; i >= 1; i--){ cout << f[n][i]; }//输出 return 0; }
作业讲解视频:
链接:https://pan.baidu.com/s/1TSKSVhxBr95O7u_m4qo5aQ?pwd=105a
提取码:105a