美文网首页
高精度整数——1. a+b

高精度整数——1. a+b

作者: 辘轳鹿鹿 | 来源:发表于2020-07-05 13:38 被阅读0次

a+b问题

题目描述

实现一个加法器,使其能够输出a+b的值。

输入描述:

输入包括两个数a和b,其中a和b的位数不超过1000位。

输出描述:

可能有多组测试数据,对于每组数据,
输出a+b的值。

示例1

输入

2 6
10000000000000000000 10000000000000000000000000000000

输出

8
10000000000010000000000000000000

解题心得:

  • 有一些整数可能非常巨大以致于我们不能使用任何内置整数类型来保存它的值,这就是高精度整数。
  • 高精度整数的保存形式
typedef struct bigInteger{
    int digit[1000];
    int size;
}bigInteger;

这里我们使用每四位为一个单位保存,size为digit数组中第一个我们还没使用过的数组单元。以整数123456789为例,digit[0]=6789,digit[1]=2345,digit[2]=1,size=3。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>


typedef struct bigInteger{
    int digit[1001];
    int size;
}bigInteger;

int main(){

    char stra[1001],strb[1001];
    while(scanf("%s %s",stra,strb)!=EOF){
        bigInteger A,B,R;
        int i,j,sum,c;
        A.size=0;
        B.size=0;
        R.size=0;
        for(i=0;i<1001;i++){
            A.digit[i]=0;
            B.digit[i]=0;
        }

        int lena=strlen(stra),lenb=strlen(strb);
        for(i=lena-1,j=0,sum=0,c=1;i>=0;i--){
            sum+=c*(stra[i]-'0');
            j++;
            c*=10;
            if(j==4||i==0){
                A.digit[A.size++]=sum;
                j=0;
                c=1;
                sum=0;
            }
        }
        for(i=lenb-1,j=0,sum=0,c=1;i>=0;i--){
            sum+=c*(strb[i]-'0');
            j++;
            c*=10;
            if(j==4||i==0){
                B.digit[B.size++]=sum;
                j=0;
                c=1;
                sum=0;
            }
        }

        int carry=0,tmp;
        for(i=0;i<A.size||i<B.size;i++){

            tmp=A.digit[i]+B.digit[i]+carry;
            R.digit[R.size++]=tmp%10000;
            carry=tmp/10000;

        }
        if(carry>0){
             R.digit[R.size++]=carry;
        }
        for(i=R.size-1;i>=0;i--){
            if(i==R.size-1){
                printf("%d",R.digit[i]);

            }
            else{
                printf("%04d",R.digit[i]);
            }
        }
        printf("\n");


    }

    return 0;

}


方若棋盘,圆若棋子,动若棋生,静若棋死。
方若行义,圆若用智,动若聘才,静若得意。

相关文章

  • 高精度整数——1. a+b

    a+b问题 题目描述 实现一个加法器,使其能够输出a+b的值。 输入描述: 输入包括两个数a和b,其中a和b的位数...

  • 上交OJ-1014. 高精度加法

    1014. 高精度加法 Description 输入2个整数a和b,输出a+b。 Input Format 输入有...

  • 高精度数(大整数)乘法

    大整数乘法 上一期(高精度加法)今天我们来研讨一下高精度乘法。 题目描述:将两个大整数(最多100位)相乘,输出结...

  • pat1016部分A+B

    1016 部分A+B (15 分) 正整数 A 的“D​A​​(为 1 位整数)部分”定义为由 A 中所有 D​A...

  • 1016

    //1016 部分A+B(15 分)//正整数 A 的“D_A(为 1 位整数)部分”定义为由 A 中所有 D_A...

  • B1022

    1022 D进制的A+B (20)(20 分) 输入两个非负10进制整数A和B(<=230-1),输出A+B的D ...

  • PAT-B 1016 部分A+B(C语言)

    题目 链接:PAT (Basic Level) Practice 1016 部分A+B 正整数 A 的“(为 1 ...

  • 1.求两个整数A+B的和

    描述:求两个整数A+B的和 输入:输入包含多组数据。每组数据包含两个整数A(1 ≤ A ≤ 100)和B(1 ≤ ...

  • 高精度整数的解法

    题意很好理解,就是计算过程中可能超出int 的范围,现在就来解决这个问题。 王道机试指南给出的解法是采用一个dig...

  • 计算(a+b)×c的值(2.1.2)

    计算(a+b)×c的值 【题目描述】给定3个整数a、b、c,计算表达式(a+b)×c的值。 【输入】输入仅一行,包...

网友评论

      本文标题:高精度整数——1. a+b

      本文链接:https://www.haomeiwen.com/subject/ixwcqktx.html