我在编写一个有关两百位以内数字的加法的算法。编完之后,我发现我的算法出现了很奇怪的问题。比如这种,66+99=651.
我发现我应该出现在的百分位的数出现在了个位。如果运算的过程中不出现进位的话,最后一位就会变成0 。就比如22+33=550 。我检查了三个小时,实在没有找到为什么会这样,不知是否有老哥有空愿意解答一下,真的万分感谢!(;へ:)
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string>
using namespace std;
int main()
{
int a_length = 0, b_length = 0;
int temp0=0;
int t1=0, t2=0, t3=0, t4=0,t5=0,t6=0;//这相当于一些临时变量,用于传递值
string temp;
string a , b;
cin >> a >> b;
a_length = a.length();
b_length = b.length();
if (a_length < b_length)
{
temp = a;
a = b;
b = temp;
temp0 = a_length;
a_length = b_length;
b_length = temp0;
}
reverse(a.begin(), a.end());
reverse(b.begin(), b.end());
a[a_length] = '0';
b[b_length] = '0';
for (int i=0;i<=b_length;i++)
{
t1 = (int)a[i]-48;
t2 = (int)b[i]-48;
for (;;)
{
if (t1 + t2+t3 > 9)
{
t5 = (t1 + t2+t3) % 10;
t6 = (t1 + t2+t3) / 10;
a[i] = (char)(t5 + 48);
++i;
t1 = (int)a[i] - 48;
t2 = (int)b[i] - 48;
t3 = t6;
}
else
{
a[i] = (char)(t1 + t2+t3 + 48);
t3 = 0;
break;
}
}
}
reverse(a.begin(), a.end());
a_length = a.length();
for (int i = 0,w=0; i <= a_length; i++)
{
if (a[i] == '0'&&w==0)
continue;
else
{
w = 1;
cout << a[i];
}
}
a[0] = 'a';
b[0] = 'b';
}