码迷,mamicode.com
首页 > 其他好文 > 详细

之前的大数相加存在bug,这个ac通过了

时间:2019-05-20 01:22:50      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:cout   std   for   数组   space   ios   string   数据   span   

#include <iostream>
#include <string>
/*project:两个大整数相加 
**@author:浅滩 
**data:2019.05.15 
*/

using namespace std;
void add(const string &,const string &);
int main()
{
string str1,str2; 
cin>>str1>>str2;
if(str1.size()>=str2.size())//我不知道为什么这莫该就ac通过了,一脸懵逼 
add(str1,str2);
else add(str2,str1);
}

void add(const string &str1,const string &str2)
{

int *num1=new int [str1.size()];
int *num2=new int [str2.size()];
int result_size;
//const int len=(str1.size()>str2.size()? str1.size():str2.size());
int result[10000];
fill(result,(result+10000),0);//初始化结果数组

for(int i=0;i<str1.size();i++)//字符串到整数数组的转换 
num1[i]=str1[i]-0; 
for(int i=0;i<str2.size();i++)
num2[i]=str2[i]-0;
int s1=str1.size()-1,s2=str2.size()-1,k=(str1.size()>str2.size()? str1.size():str2.size())-1;
cout<<k+1;
while(s1>=0&&s2>=0)
{
result[k]=num1[s1]+num2[s2];
k--;s1--;s2--;
}

while(s1>=0)
{
result[k]+=num1[s1];
k--;s1--;
}
while(s2>=0)
{
result[k]+=num1[s2];
k--;s2--;
}
// cout<<k+1;return;
result_size=(str1.size()>str2.size()? str1.size():str2.size())-1;
for(int i=result_size;i>k+1;i--)//从后向前进位 
{
result[i-1]+=result[i]/10;
result[i]=result[i]%10; 
}
//cout<<result_size<<endl;
for(int i=k+1;i<=k+1+result_size;i++)
cout<<result[i]; 
}
//之前的bug是下面这组测试数据 
//456 98949444184
// 9683087243640
//98949444184 456结果不相同

 

之前的大数相加存在bug,这个ac通过了

标签:cout   std   for   数组   space   ios   string   数据   span   

原文地址:https://www.cnblogs.com/cstdio1/p/10891634.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!