时间限制: 1000 MS 内存限制: 65536 K
提交数: 584 (0 users) 通过数: 278 (257 users)
问题描述
普通的a + b太没有意思了,小明决定玩点花样:如果加法没有进位,结果会是怎样?
输入格式
输入两个正整数a和b(0<=a, b<100000000)
输出格式
输出没有进位情况下加法的结果。
PS:类似125 +932的情况,输出的数的首位不能为0,即125 + 932 =57;类似5555 + 5555的情况输出只有一个 0.
样例输入
45 79
样例输出
14
来源
xmu
#include <stdio.h>
#include <string.h>
#define MAX_SIZE 15
#define SWAP(x, y) { int t = x; x = y; y = t; }
void reverse(char *s, int len)
{
int i, j;
for (i = 0, j = len-1; i < j; ++i, --j)
SWAP(s[i], s[j]);
}
int main()
{
char a[MAX_SIZE] = { 0 };
char b[MAX_SIZE] = { 0 };
char sum[MAX_SIZE] = { 0 };
int ptr_a, ptr_b, ptr_sum;
int len_a, len_b;
scanf("%s %s", a, b);
len_a = (int)strlen(a);
len_b = (int)strlen(b);
reverse(a, len_a);
reverse(b, len_b);
ptr_a = ptr_b = ptr_sum = 0;
while (ptr_a < len_a && ptr_b < len_b)
{
sum[ptr_sum] = (char)(((a[ptr_a] - '0') + (b[ptr_b] - '0')) % 10 + '0');
ptr_a++;
ptr_b++;
ptr_sum++;
}
while (ptr_a < len_a)
{
sum[ptr_sum] = (char)((a[ptr_a] - '0') % 10 + '0');
ptr_a++;
ptr_sum++;
}
while (ptr_b < len_b)
{
sum[ptr_sum] = (char)((b[ptr_b] - '0') % 10 + '0');
ptr_b++;
ptr_sum++;
}
ptr_sum--;
while (ptr_sum >= 0 && sum[ptr_sum] == '0')
ptr_sum--;
if (ptr_sum < 0)
printf("0\n");
else
{
while (ptr_sum >= 0)
putchar(sum[ptr_sum--]);
printf("\n");
}
return 0;
}