计蒜客 T1099: 大整数减法
问题
求两个大的正整数相减的差。
输入格式
共 2 行,第 1 行是被减数 a,第 2 行是减数 b(a>b)。每个大整数不超过 200 位,不会有多余的前导零。
输出格式
一行,即所求的差。
格式说明
输出时每行末尾的多余空格,不影响答案正确性
思路
- 鉴于之前的大整数加法,当时采用的是从下标1开始,而且有末尾\n的影响,计算时要考虑的太多,因而在减法这里,做了些许调整,改为:从下标0开始,并且将末尾的\n修改为0。
- 主要思路:包括赋值及统计长度、修改\n为0、对齐处理、退位处理
- 赋值、统计长度:采用getchar()函数进行获取并赋给数组,规定遇\n退出,此时\n赋给了数组,但长度没有累计。同时,在长度到达201时跳出,题目规定是不超过200。
- 修改\n为0:将\n所在位置置0。
- 对齐处理:比较两个数组的长度,长度小者将数组进行移位,同时将原来的位置置0。
- 退位处理:将在长度内的数组元素相减,若相减结果是负数,那就令前一数组元素减1。
- 判断相减的数是否都为0:如果是0+0,则程序提前终止。用zero_if来统计所有的数组元素之和是否为0,如果都为0,说明是0+0。
- 去除前导0:设置flag标志位,如果flag已经被赋予1,说明前导0已循环完毕,没有打印输出,可以安全打印出剩余的数组元素。
这个减法的思路实际上和大整数加法的思路是一样的,有些许不同,关于大整数加法的思路大家可以看看之前的文章:计蒜客 T1098:大整数加法
#include<stdio.h>
#define N 200
int main(){
int length_a=0,length_b=0,flag=0,zero_if=0;//从0开始,前面不再有序号为0的防止进位的0
char a[N]={
0