加法
#include<iostream>
#include<cstring>
#include<cstdlib>
using namespace std;
char num1[1002], num2[1002];
char* add(char* s1, char* s2)
{
char* longer,//相比之下的长串
* shorter;//相比之下的短串
int i, j, k, p;
int len1 = strlen(s1), len2 = strlen(s2);
if (len1 > len2)
{
longer = s1;
shorter = s2;
}
else
{
longer = s2;
shorter = s1;
}
j = strlen(longer);
k = strlen(shorter);
//判断谁是长串短串,然后对短串进行处理
p = j - k;//串长差值;
for (i = j; k > 0; i--)
{
shorter[i - 1] = shorter[k - 1];
k--;
}
for (i = p; i > 0; i--)
shorter[i - 1] = '0';//这里改了下,i不能>=0;不然串长相同时shorter[0]给杨咯(1+2=2)
//把因为挪后面移动的位用'0'覆盖填充,方便以后计算
k = 0;//表示进位
j = strlen(longer);
for (i = j - 1; i >= 0; i--)
{
longer[i] = longer[i] + shorter[i] - 2 * '0' + k;//加法需要减2个‘0’字符,减掉多余的ascii
if (longer[i] / 10)//大于10,需要进位
{
k = 1;//进位符号标记
longer[i] %= 10;
}
else
k = 0;
longer[i] += '0';//从数字变成字符
}
j = strlen(longer);
if (k == 1)//看看最大位进不进位
{
for (i = j; i > 0; i--)//第一位有进位,其实更好的办法是吧第0号元素空着,可以省下这一步
{
longer[i] = longer[i - 1];//
}
longer[0] = '1';//最前面一位变成0
}
return longer;
}
int main()
{
int time, i;
cin >> time;
for (i = 1; i <= time; i++)
{
cin >> num1;
cin >> num2;
cout << "Case " << i << ":" << endl;
cout << num1 << " + " << num2 << " = ";
cout << add(num1, num2) << endl;
if (i != time)
cout << "\n";
memset(num1, 0, sizeof(num1));//清空数组
memset(num2, 0, sizeof(num2));
}
return 0;
}