Python学习

九度题目1198:a+b (高精度加法)

题目描述:
实现一个加法器,使其能够输出a+b的值。
输入:
输入包括两个数a和b,其中a和b的位数不超过1000位。
输出:
可能有多组测试数据,对于每组数据,
输出a+b的值。
样例输入:
2 6
10000000000000000000 10000000000000000000000000000000
样例输出:
8
10000000000010000000000000000000

思路:
1. 建立结构体,成员函数来初始化、打印。重载运算符。
2. 每个数字拆成四个一组的int数组,对其进行操作。
3. 注意carry进位以及size的问题。

代码:

#include<iostream>
#include<stdio.h>
#include<cstdio>
#include<math.h>
#include<string.h>
using namespace std;
struct BigInteger{
    int digit[1001];
    int size;
    void init(){  
        /*for(int i=0;i<=1000;i++){
            digit[i]=0;
        }*/
        memset(digit,0,sizeof(digit));
    }
    void set(char str[]){
        int j=0;
        int c=1;
        int count=0;
        init();
        for(int i=strlen(str)-1;i>=0;i--){
            digit[j]+=(str[i]-'0')*c;
            count++;
            c*=10;
            if(count==4||i==0){
                c=1;
                j++;
                count=0;
            }
        }
        size=--j;
         
    }
    void ouput(){
        for(int i=size;i>=0;i--){
            if(i==size)
                printf("%d",digit[i]);
            else
                printf("%04d",digit[i]);  //如果不是第一个需要补0
        }
        cout<<endl;
    }
    BigInteger operator + (const BigInteger &A) const{ //B+A,灵魂在B
        BigInteger c;
        c.init();
        int carry=0;
        c.size=0;
        for(int i=0;i<=A.size||i<=size;i++){
            int temp=A.digit[i]+digit[i]+carry;
            if(temp>=10000){
                carry=temp/10000;
                temp%=10000;
            }
            else
                carry=0;
            c.digit[c.size++]=temp;
             
        }
        if(carry!=0){
                c.digit[c.size]=carry;
        }
        else
            c.size--;
        return c;
    }
}a,b,c;
int main(){
    char str1[1000],str2[1000];
    while(cin>>str1>>str2){
        a.set(str1);
        b.set(str2);
        BigInteger c;
        c=a+b;
        c.ouput();
    }
    return 0;
}
/**************************************************************
    Problem: 1198
    User: WZDCJ0206
    Language: C++
    Result: Accepted
    Time:100 ms
    Memory:1532 kb
****************************************************************/
Be the First to comment.

Leave a Comment

您的电子邮箱地址不会被公开。

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据