A+B problem高精度升级版

[童程童美正大]A+B Problem(高精升级版)

题目描述

高精度加法,相当于a+b problem。

输入格式

输入包含两行。(-10^500<=a,b<=10^500)

输出格式

输出只有一行,为a+b的值。

样例 #1

样例输入 #1

1
2

样例输出 #1

3

样例 #2

样例输入 #2

-1000
99

样例输出 #2

-901

样例 #3

样例输入 #3

1007
1992

样例输出 #3

2999

提示

50%的数据保证两个整数都是非负整数。


#include<iostream>
#include<cmath>
int judge(unsigned long int x)
{
    int k;
    if (x == 2)
        return 1;
    if (x % 2 == 0)
        return 0;
    for (k = 2; k <= sqrt(x); k++)
    {
        if (x % k == 0)
            return 0;
    }
    return 1;
}
 
int main()
{
    int num1, num2, i;
    int r1, r2;
    while (scanf("%ld", &num1) && num1 != 0)
    {
        if (num1 >= 8)
        {
            if (num1 % 2 == 0)
            {
                num2 = num1 - 4;
            }
            else
            {
                num2 = num1 - 5;
            }
            for (i = 2; i <= num2; i++)
            {
                r1 = judge(i);
                if (r1 != 0)
                {
                    r2 = judge(num2 - i);
                    if (r2 != 0) break;
                }
            }
            if (num1 % 2 == 1)  printf("2 3 %ld %ld\n", i, num2 - i);
            else printf("2 2 %ld %ld\n", i, num2 - i);
        }
        else printf("Impossible\n");
    }
}
   

仅供参考:

#include <stdio.h>
#include <string.h>
#define MAXLEN 1000
char a1[MAXLEN];
char a2[MAXLEN];
static int v1[MAXLEN];
static int v2[MAXLEN];
static int v3[MAXLEN];
int i,j,n,L,z;
void main(void) {
    scanf("%d",&n);
    for (j=0;j<n;j++) {
        scanf("%s%s",a1,a2);

        L=strlen(a1);
        for (i=0;i<L;i++) v1[i]=a1[L-1-i]-'0';

        L=strlen(a2);
        for (i=0;i<L;i++) v2[i]=a2[L-1-i]-'0';

        for (i=0;i<MAXLEN;i++) v3[i]=v1[i]+v2[i];

        for (i=0;i<MAXLEN;i++) {
            if (v3[i]>=10) {
                v3[i+1]+=v3[i]/10;
                v3[i]=v3[i]%10;
            }
        }

        printf("Case %d:\n", j+1);
        printf("%s + %s = ", a1, a2);

        z=0;
        for (i=MAXLEN-1;i>=0;i--) {
            if (z==0) {
                if (v3[i]!=0) {
                    printf("%d",v3[i]);
                    z=1;
                }
            } else {
                printf("%d",v3[i]);
            }
        }
        if (z==0) printf("0");

        printf("\n");
    }
}
//Sample Input
//3
//0 0
//1 2
//112233445566778899 998877665544332211
//
//Sample Output
//Case 1:
//0 + 0 = 0
//Case 2:
//1 + 2 = 3
//Case 3:
//112233445566778899 + 998877665544332211 = 1111111111111111110