高精度加法(水题)

2018-03-30  本文已影响0人  myleosu

模拟大数加法
我的思路很简单,就是看两个数长度是否相等,不等则补前导0直到两个数长度相等然后进行两数相加。(用x来保存进位)
上代码(用string类补前导0凉了...用char做一样不过过程相对麻烦点)

#include <iostream>
#include <string>
#include <algorithm>
#include <cstring>
using namespace std;
char str1[2000],str2[2000],str3[2000];
int num[2000];
int main()
{
    cin>>str1>>str2;
    int str1len = strlen(str1);
    int str2len = strlen(str2);
    int len = abs(str1len-str2len);
    for(int i = 0;i<len;i++)//将str3置为0
        str3[i] = '0';
    if(str1len>str2len){//拼接字符串
        strcat(str3,str2);
        strcpy(str2,str3);
    }
    else if(str2len>str1len){//拼接字符串
        strcat(str3,str1);
        strcpy(str1,str3);
    }
    len = strlen(str1);
    int x = 0;
    while(len--){//模拟加法
        x = (str1[len]-'0')+(str2[len]-'0')+x;
        num[len] = x%10;
        x/=10;
    }
    if(x!=0)//判断最高进位
        cout<<x;
    len = strlen(str1);
    for(int i = 0;i<len;i++)
        cout<<num[i];
    return 0;
}
上一篇下一篇

猜你喜欢

热点阅读