洛谷:P1601 A+B Problem(高精)

#include<iostream>
#include<cmath>
using namespace std;
char num1[550],num2[550],ans[550];//保存输入的数以及输出的数
int f(int ind1,int ind2,int ansind,int in){
    char temp1=num1[ind1],temp2=num2[ind2];//读取当前位
    if(ind1<0 && ind2<0){//当前位都为0,退出
        if(in>0){ans[ansind]='0'+in;ansind++;};//如果还有进位
        return ansind;//返回最高位以用于输出
    }
    if(ind1<0)temp1='0';//如果读取到的位为空
    if(ind2<0)temp2='0';

    int temp=(temp1-'0')+(temp2-'0')+in;//求和
    ans[ansind]=temp%10+'0';//赋值
    return f(ind1-1,ind2-1,ansind+1,temp/10);//求下一位
    
}
int main(){
    int temp1=0,temp2=0;
    cin>>num1>>num2;
    while(num1[temp1]>='0')temp1++;
    while(num2[temp2]>='0')temp2++;//分别得出两个数的最高位
    for(int i=f(temp1-1,temp2-1,0,0)-1;i>=0;i--){
        cout<<ans[i];//字符串应倒过来输出为数。
    }
    
    
    return 0;
}

地址:https://www.luogu.com.cn/problem/P1601

猜你喜欢

转载自www.cnblogs.com/forwhat00/p/13210216.html