厦大C语言上机 1366 Simple a + b

1366.Simple a + b


时间限制: 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;
}


上一篇:华为接入S5700-LI 脚本配置


下一篇:【编译原理】让我们来构建一个简单的解释器(Let’s Build A Simple Interpreter. Part 2.)(python/c/c++版)(笔记)