加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

51nod 1005 大数加法

发布时间:2020-12-14 01:33:12 所属栏目:大数据 来源:网络整理
导读: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

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 11050

char 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 */

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读