C++U7-1-高精度加减

学习目标

 

 

 

 高精度加法

 

 

 

 

 

 

 

 

[高精度加法]

 

#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;
} 
View Code

 

 

高精度减法

 

 

 

 

 

 

 

 

 

 

 

 

#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;
}
View Code

 

[数楼梯]高精度版本

 

 

#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;
}
View Code

 

作业讲解视频:

链接:https://pan.baidu.com/s/1TSKSVhxBr95O7u_m4qo5aQ?pwd=105a
提取码:105a

 

 

posted @ 2024-04-21 14:28  小虾同学  阅读(2)  评论(0编辑  收藏  举报