17 高精度整数

N的阶乘

http://www.nowcoder.com/practice/f54d8e6de61e4efb8cce3eebfd0e0daa

理论说明

我们常用如下结构体保存一个高精度整数:

struct bigInteger {
	int digit[1000];
    int size;
};

其中digit数组用来保存大整数中每若干位的数字,这里我们暂且使用每4位为一个单位保存,size为digit数组中第一个我们没使用过的数组单元(即下一个我们可以使用的数组单元)。以整数123456789为例,当我们使用该数据结构体来保存该值时,其结果是这样的:digit[0]=6789;digit[1]=2345; digit[2]=1;size=3;

题目来源和说明

2010年华中科技大学计算机研究生机试真题

题目描述

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

输入说明

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

输出说明

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

样例展示

输入:
2 6
10000000000 10000000000000000
输出:
10000010000000000

C++代码

#include<iostream>
#include<string.h>
using namespace std;

struct bigInteger {
    int digit[1000];
    int size;
    void init() {
        for(int i=0;i<1000;i++)digit[0]=0; //所有位清零
        size=0; //下一个未使用数组单元未0
    }
    void set(char str[]) { //从字符串中提取整数
        init();
        int L=strlen(str);
        for(int i=L-1,j=0,t=0,c=1;i>=0;i--) {
            t+=(str[i]-'0')*c;
            j++;
            c=c*10;
            if(j==4 || i==0) {
                digit[size++]=t;
                j=0;
                t=0;
                c=1;
            }
        }
    }
    void output() { //将该高精度整数输出
        for(int i=size-1;i>=0;i--) {
            if(i!=size-1) printf("%04d",digit[i]);
            else printf("%d",digit[i]);
        }
        printf("\n");
    }
    bigInteger operator+(const bigInteger &A) const { //加法
        bigInteger ret;
        ret.init();
        int carry=0;
        for(int i=0;i<A.size || i<size;i++) {
            int temp=A.digit[i]+digit[i]+carry;
            carry=temp/10000;
            temp%=10000;
            ret.digit[ret.size++]=temp;
        }
        if(carry!=0) { //计算结束后若最高位有进位
            ret.digit[ret.size++]=carry;
        }
        return ret; //返回
    }
}a,b,c;

char str1[1002],str2[1002];

int main() {
    while(scanf("%s%s",str1,str2)!=EOF) { //输入
        a.set(str1);
        b.set(str2);
        c=a+b;
        c.output();
    }
    return 0;
}

同类题目

  1. N的阶层 https://www.nowcoder.com/practice/f54d8e6de61e4efb8cce3eebfd0e0daa?tpId=60&tqId=29496&tPage=2&ru=/kaoyan/retest/1001&qru=/ta/tsing-kaoyan/question-ranking

C++代码

高校夏令营机试训练 文章被收录于专栏

Leetcode题目太多,不知道如何准备高校夏令营?欢迎关注本专栏,和本小白一起准备夏令营吧! 本专题的规划如下: 截止到4月下旬:以王道考研为依托,提供夏令营机考的准备计划,打好基础 截止到5月中旬:以剑指offer进一步加强 本专题的内容如下: 1. 给出题目的在线测试链接,方面您检查代码的正确性 2. 给出题解

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务