大数相减问题(C语言)

大数相减

描述

两个长度超出常规整形变量上限的大数相减,请避免使用各语言内置大数处理库,如Java.math.BigInteger等。

输入

有 N 行测试数据,每一行有两个代表整数的字符串 a 和 b,长度超过百位。规定 a>=b,a, b > 0。
测试结果可以用 linux 小工具 bc进行测试是否正确。

输出

返回表示结果整数的字符串。

输入样例

1000 - 1

输出样例

999

此代码通过AC测试
题目来源:小米OJ
语言环境(C -GCC 4.8.4)
 #include 
 #include 
 #include 
 #include 
 #include 

/**
* @param  char*  单行测试数据
*/
void solution(char *line)
{
    // 在此处理单行测试数据
    char* a = (char*)malloc(sizeof(char) * 300);
    char* b = (char*)malloc(sizeof(char) * 300);

    int  aLen = 0;
    int bLen = 0;
    int i = 0;
    int j = 0;
    sscanf(line, "%s - %s", a, b);
    aLen = strlen(a);//计算第一个数的字符串长度
    bLen = strlen(b);//计算第二个数的字符串长度
    // 将两个数的末端位对齐
    for (i = bLen - 1, j = aLen - 1; i >= 0; i--, j--)
    {
        a[j] = a[j] - b[i] + '0';
        //两数对应某位相减,不够减就向前一位借一
        if (a[j] < '0')
        {
            int k = j - 1;
            //向前循环,直至找到可借位
            while (a[k] <= '0')
            {
                a[k] = '9';
                k--;
            }
            a[k] = a[k] - 1;//找到可借位

            a[j] = a[j] + 10;//借一补十

        }
    }
    //打印处理结果,将结果最前方的0处理掉
    for (i = 0; iif (a[i] != '0') break;
    }
    for (; iputchar(a[i]);
    }
    putchar('\n');
    free(a);
    free(b);
}

int main()
{
    //测试   输入: 1000 - 1   减号两边各保持一个空格
    char line[300];
    gets_s(line);
    solution(line);
}

你可能感兴趣的:(大数相减问题(C语言))