高精度加法(水题)
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;
}