51nod 1005 大数加法

来源:互联网 发布:php aes解密 乱码 编辑:程序博客网 时间:2024/06/06 12:56

51nod 1005 大数加法
心好累。。。

#include <iostream>#include <stdio.h>#include <string.h>#include <algorithm>#include <math.h>#include <queue>#include <stack>#include <vector>using namespace std;#define INF 0x3f3f3f#define pi acos(-1.0)#define MAX 1000010#define N 11050char a[N],b[N];int num1[N],num2[N];int flag1 = 0,flag2 = 0;void add(){    int len1 = strlen(a);    int len2 = strlen(b);    int k = 0;    for(int i = len1-1; i >= flag1; i--)        num1[k++] = a[i]-'0';    len1 = k;    k = 0;    for(int i = len2-1; i >= flag2; i--)        num2[k++] = b[i]-'0';    len2 = k;    int flag = 0;    int lenmax = max(len1,len2);    for(int i = 0; i < lenmax; i++)    {        if(i < lenmax)            num1[i] = num1[i]+num2[i];        else if(i<len2 && i>=len1)            num1[i] = num2[i];        num1[i] += flag;        if(num1[i] > 9)        {            num1[i] -= 10;            flag = 1;        }        else            flag = 0;    }    if(flag1 && flag2)        printf("-");    if(flag == 1)   printf("%d",flag);    for(int i = lenmax-1; i >= 0; i--)        printf("%d",num1[i]);    printf("\n");}void dec(){    int len1 = strlen(a);    int len2 = strlen(b);    int k = 0;    for(int i = len1-1; i >= flag1; i--)        num1[k++] = a[i]-'0';    len1 = k;    k = 0;    for(int i = len2-1; i >= flag2; i--)        num2[k++] = b[i]-'0';    len2 = k;    int lenmax = max(len1,len2);    int bian = 0;    if(lenmax != len1)        bian = 1;    else if(len1 == len2)    {        for(int i = lenmax-1; i >= 0; i--)        {            if(num1[i] < num2[i])            {                bian = 1;                break;            }            else if(num1[i] > num2[i])                break;        }    }    int t[N];    if(bian == 1)    {        for(int i = 0 ;i < len1; i++)            t[i] = num1[i];        for(int i = 0; i < len2; i++)            num1[i] = num2[i];        for(int i = 0; i < len1; i++)            num2[i] = t[i];        int temp = len1; len1 = len2; len2 = temp;    }    int c[N];    int flag = 0;    for(int i = 0; i < lenmax; i++)    {        if(i < lenmax)            c[i] = num1[i]-num2[i];        if(i < len1 && i >= len2)            c[i] = num1[i];        c[i] += flag;        if(c[i] < 0)        {            c[i] += 10;            flag = -1;        }        else            flag = 0;    }    if(bian == 1 && flag2 == 1)        printf("-");    if(bian == 0 && flag1 == 1)        printf("-");    int pan_0 = 0;    for(int i = lenmax-1; i >= 0; i--)    {        if(pan_0 == 0 && c[i] != 0)            pan_0 = 1;        if(pan_0 == 1)            printf("%d",c[i]);    }    printf("\n");}int main(){    scanf("%s%s",&a,&b);    if(a[0] == '-') flag1 = 1;    if(b[0] == '-') flag2 = 1;    if(flag1 ^ flag2 == 0)        add();    else        dec();    return 0;}/*7274263886340608722145353913216918286860-4745949428771219202495704324129525988945*/
0 0
原创粉丝点击