两个大数相加: 在这里默认数据合适的情况下;并且不考虑符号位;如果考虑的话;
可以先比较两个无符号的大小;然后再做减运算;
思路:
1、创建两个临时空间,将字符串拷贝进去 然后初始复制为0,最后一位为'\0';然后再逐个拷贝进去;
2、创建和的数组;在原来的基础上多一位;
从第 max-len;开始递减 ,进行和运算;
sum=temp1[i]+temp2[i];
if(sum>9)和大于9 有进位;
{
if(i==1) overflow=1;
over=1;
sum%=10;
}
string get_sum(string str1, string str2)
{
int n1 = str1.length();
int n2 = str2.length();
int over = 0;//有没有进位;
int first_flow = 0;//溢出位,首位是否溢出
int max_len = n1 > n2 ? n1 : n2;//找出最大的位数;砍谁的位数多
char *temp1 = new char[max_len + 1];//给第一个字符串创建数组空间
temp1[max_len] = '\0';//末尾为结束符;
memset(temp1, '0', max_len);//其余的全都复制为‘0’
for (int i = n1 - 1; i >= 0; i--)
temp1[i] = str1[i];//然后逐个把原来的字符串复制进来;
char *temp2 = new char[max_len + 1];
temp2[max_len] = '\0';
memset(temp2, '0', max_len);
for (int i = n2 - 1; i >= 0; i--)
temp2[i] = str2[i];
char *result = new char[max_len + 2];
memset(result, '0', max_len );
result[max_len + 1] = '\0';
for (int i = max_len-1; i >= 0; i--)
{
int temp_sum = temp1[i]-'0' + temp2[i]-'0' + over;
if (temp_sum > 9)//如果某一位的和大于等于10,产生进位;
{
if (i == 0)//如果这时候是第一位的话;
{
first_flow = 1;//产生溢出位;
}
over = 1;
result[i+1]= temp_sum- 10+'0';
}
else
{
over = 0;
result[i+1] = temp_sum + '0';
}
}
if (first_flow == 1)//如果有溢出的话,第一位赋值为1;
{
result[0] = 1+'0';
}
for (int i = 0; i < max_len + 1; i++)
cout << result[i] << " ";
string st = result;
return st;
}