首页 > 代码库 > 大数加减1——将两个数均前后倒置,以对齐最低位

大数加减1——将两个数均前后倒置,以对齐最低位

#include <stdio.h>//将读入的数据存储到num[1]~num[x]中,num[0]表示存入数据的长度。void read(int num[]){    int i;    char ch;    for (i = 0; i<500; i++)        num[i] = 0;    i = 1;    while ((ch = getchar()) != \n)    {        num[i] = ch - 0;        i++;        num[0]++;    }}//将数据num[]中的数翻转,以便计算void rev(int num[]){    int i, t;    for (i = 1; i <= num[0] / 2;i++)    {        t = num[i];        num[i] = num[num[0] + 1 - i];        num[num[0] + 1 - i] = t;    }}void print(int num[]){    char character[11] = { "0123456789-" };//character[n]表示数字n的字符形式。character[10]=‘-‘用于输出减法结果中的负号。    int i;    for (i = 1; i <= num[0]; i++)        printf("%c", character[num[i]]);    printf("\n");}//将a[]和b[]的值相加,存储于sum[]中。void add(int sum[], int a[], int b[]){    //flag为进位标志位。    int i, flag = 0;    rev(a);    rev(b);    for (i = 1; i <= a[0] || i <= b[0]; i++)        sum[i] = a[i] + b[i];    if (a[0] > b[0])         sum[0] = a[0];    else         sum[0] = b[0];    for (i = 1; i <= sum[0]; i++)    {        sum[i] += flag;        if (sum[i] > 9)         {            sum[i] = sum[i] % 10;            flag = 1;        }        else             flag = 0;    }    if (1 == flag)    {        sum[0] += 1;        sum[i] = 1;    }    rev(sum);    rev(a);//加法运算完之后,再将a,b翻转回来。    rev(b);}void sub(int rst[], int a[], int b[]){    int i;    int flag = 0;//flag为借位标志位。    rev(a);    rev(b);    for (i = 1; i <= a[0] || i <= b[0]; i++)        rst[i] = a[i] - b[i];    if (a[0] > b[0])         rst[0] = a[0];    else         rst[0] = b[0];    for (i = 1; i <= rst[0]; i++)    {        rst[i] += flag;        if (rst[i] < 0)         {            flag = -1;            rst[i] += 10;        }        else             flag = 0;    }    if (-1 == flag)    {        //此时,flag=-1表示a-b<0,故转换为求b-a。需要先将a,b翻转为原始数据        rev(a);        rev(b);        sub(rst,b,a);        //进行sub运算后,a,b,rst均为正常形式,需要将其翻转后,再添加负号。        rev(rst);        rev(a);        rev(b);        //在结果的最高位增加字符‘-’        rst[0]++;        rst[rst[0]] = 10;//如果某位为10,则输出时该位为“-”;    }    rev(rst);    rev(a);    rev(b);}int main(){    int a[500], b[500], he[500], cha[500];    printf("Input a:");    read(a);    printf("Input b:");    read(b);    add(he, a, b);    sub(cha, a, b);    print(he);    print(cha);    return 0;}