第一种:
#include<iostream>
using namespace std;
int main()
{
int a, b, x, y, c;
int result;
while (cin >> a >> b)
{
if (a == 0 && b == 0)
{
break;
}//或者跟while一起写,while(cin>>a>>b&&(a!=0||b!=0))
result = 0, c = 0;
while (a > 0 || b > 0)
{
x = a % 10;
y = b % 10;
a = a / 10;
b = b / 10;
c = x + y + c;
if (c >= 10)
{
++result;//加法只能进一位
c = c / 10;//为下个位数提供进位数
}
else
{
c = 0;
}
}
if (result == 0)
{
cout << "No carry operation." << endl;
}
else
{
if (result > 1)
{
cout << result << " carry operations." << endl;
}
else
{
cout << result<<" carry operation." << endl;
}
}//注意operation和operations,还有标点.
}
return 0;
}
第二种:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
unsigned long a, b, carry;//unsigned long无符号长整型
vector <int> v1, v2;
int index_a, index_b;
//把多位数分成一个一个的数字存在vector容器中,例如一个五位数15674,把它分成1,5,6,7,4五个数存在vector中
void digit(unsigned long x, unsigned long y)
{
for (int i = x; i>0; i /= 10)
v1.push_back(i % 10);
for (int i = y; i>0; i /= 10)
v2.push_back(i % 10);
}
int main()
{
while (cin >> a >> b && (a != 0 || b != 0))
{
v1.clear();
v2.clear();//清空容器中的内容
int carry_counter = 0;
digit(a, b);
carry = 0;
/*举个例子:24573
+ 249
————————就是24573+249*/
//就上面的例子而言,下面的for循环作用:检查个位、十位、百位有没有进位的情况
for (int j = 0; j<v1.size() && j<v2.size(); j++)
{
carry = (v1[j] + v2[j] + carry) / 10;
if (carry)
++carry_counter;
index_a = index_b = j;
}
//下面两个for循环作用:检查 千位数+进位数(百位给的),看结果要不要进位
for (int i = index_a+1; i<v1.size(); i++)
{
carry = (v1[i] + carry) / 10;
if (carry)
++carry_counter;
}
for (int i = index_b+1; i <v2.size(); i++)
{
carry = (v2[i] + carry) / 10;
if (carry)
++carry_counter;
}
if (carry_counter == 1)
cout << "1 carry operation." << endl;
else if (carry_counter>1)
cout << carry_counter << " carry operations." << endl;
else
cout << "No carry operation." << endl;
}
return 0;
}