题目描述:

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

输入:

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

输出:

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

样例输入:

2 6

1000000000000000000000 10000000000000000000000000000000000000000000

样例输出:

8

100000000000000000000000000000000000000000000

#include <iostream>
#include<string.h>
#include<cstdio>
using namespace std; struct bigInteger{
int digit[];//按四位数一个单位保存数值
int size;//下一个我们未使用的数组单元 void init(){//初始化
for(int i=;i<;i++)
digit[i] = ;
size = ;
} void set(char str[]){//从字符串中提取整数
init();
int L = strlen(str);//计算字符串长度
for(int i=L-,j=,t=,c=;i>=;i--){
/**从最后一个字符开始倒序遍历字符串,
j控制每4个字符转换成一个数字存入数组,
t临时保存字符转换位数字的中间值,
c表示当前位的权重,按1,10,100,1000顺序变化
*/
t += (str[i]-'')*c;//计算这个四位数中当前字符代表的数字,即数字乘以当前位权重
j++;//当前转换字符数增加
c *= ;//计算下一位权重
if(j == || i == ){//若已经连续转换四个字符,或者已经达到最后一个字符
digit[size++] = t;//这四个字符代表的四位数存入数组,size移动到下一个数组单元
j=;
t=;
c=;
}
}
} void output(){//将该高精度整数输出
for(int i=size-;i>=;i--){
if(i!=size-)
printf("%04d",digit[i]);//即当前输出的数字不是最高位数字,用%04的输出前导0,即当前数字不足4位时由0补充
else
printf("%d",digit[i]);//若是最高位,则无需输出前导0
}
printf("\n");
} bigInteger operator + (const bigInteger &A) const {//加法运算符
bigInteger ret;//返回两数相加的结果
ret.init();
int carry = ;//进位,初始值为0
for(int i=;i<A.size || i<size;i++){
int temp = A.digit[i]+digit[i]+carry;//计算两个整数当前位以及来自低位的进位和
carry = temp/;//计算该位的进位
temp %= ;//去除进位部分,取后四位
ret.digit[ret.size++] = temp;//保存该位结果
}
if(carry != ){//计算结束后若最高位有进位
ret.digit[ret.size++]=carry;//保存该进位
}
return ret;
}
}a,b,c; char str1[],str2[];
int main()
{
scanf("%s %s",str1,str2);
a.set(str1);//两个字符串分别设置两个高精度整数
b.set(str2);
c = a+b;
c.output();//输出
return ;
}

对于c和c++,要使用结构体保存一个高精度整数:

struct bigInteger{
int digit[];//按四位数一个单位保存数值
int size;//下一个我们未使用的数组单元
};

高精度整数 - a+b(王道)的更多相关文章

  1. Java中的高精度整数和高精度小数

    在实际编码中,会遇到很多高精度的事例,比如,在计算金钱的时候就需要保留高精度小数,这样计算才不会有太大误差: 在下面的代码中,我们验证了,当两个float型的数字相加,得到的结果和我们的预期结果是有误 ...

  2. POJ 1504 Adding Reversed Numbers (水题,高精度整数加法)

    题意:给两个整数,求这两个数的反向数的和的反向数,和的末尾若为0,反向后则舍去即可.即若1200,反向数为21.题目给出的数据的末尾不会出现0,但是他们的和的末尾可能会出现0. #include &l ...

  3. C++高精度整数加减乘除模板

    其中高精度乘法通过了POJ2389,其他没有测过,不过应该是没有问题的. 其中高精度除法返回一对string,分别表示商和余数. 代码: #include <bits/stdc++.h> ...

  4. 无线OSS-高精度整数加法

    #include<iostream> #include<string> using namespace std; int compareStr(string str1, str ...

  5. 九度OJ1198 a+b 【高精度整数】

    题目地址:http://ac.jobdu.com/problem.php?pid=1198 题目描述: 实现一个加法器,使其能够输出a+b的值. 输入: 输入包括两个数a和b,其中a和b的位数不超过1 ...

  6. Java 高精度数字

    BigInteger // 高精度整数 BigDecimal //高精度小数  小数位数不受限制

  7. 大整数相加 a+b 的c语言实现

    终于来到我所期盼的高精度整数相加的题目了.这个题很经典,也算是一个很好的算法入门题吧. 如果是java的话,系统类库已经内置了BigInteger类,直接调用就可以很轻易地解决了.但是学习c的编写也是 ...

  8. FFT实现高精度乘法

    你应该知道$FFT$是用来处理多项式乘法的吧. 那么高精度乘法和多项式乘法有什么关系呢? 观察这样一个$20$位高精度整数$11111111111111111111$ 我们可以把它处理成这样的形式:$ ...

  9. N的阶层(王道)

    题目描述: 输入一个正整数N,输出N的阶乘. 输入: 正整数N(0<=N<=1000) 输出: 输入可能包括多组数据,对于每一组输入数据,输出N的阶乘 样例输入: 4 5 15 样例输出: ...

随机推荐

  1. 使用maven构建第一个web项目

    在eclipse中,正常创建maven项目后,发现在index.jsp中会报错,此时在pom.xml中加入如下依赖关系即可 <dependency> <groupId>java ...

  2. 四维偏序(K-D-Tree+rebuild)

    其实只是放个代码,会K-D-Tree的同学看了就知道怎么rebuild了,其实也是很简单粗暴的…… 单独再发一次吧,感觉把代码跟之前的一起发不知道啥时候就找不到了…… #include<bits ...

  3. python接口自动化12-案例分析(csrfToken)【转载】

    前言: 有些网站的登录方式跟前面讲的博客园和token登录会不一样,把csrfToken放到cookie里,登录前后cookie是没有任何变化的,这种情况下如何绕过前端的验证码登录呢? 一.登录前后对 ...

  4. Selenium2+python自动化23-富文本(自动发帖)【转载】

    前言 富文本编辑框是做web自动化最常见的场景,有很多小伙伴遇到了不知道无从下手,本篇以博客园的编辑器为例,解决如何定位富文本,输入文本内容 一.加载配置 1.打开博客园写随笔,首先需要登录,这里为了 ...

  5. 《锋利的jQuery》读书要点笔记6——制作商城网页:结构和样式设计

    第8章 用jQuery打造个性网站 做一个购物网站并用jQuery来完善.大体步骤是: 收集素材 确定网站结构 A. 文件结构,imagea文件夹用来存放将要用到的图片,styles文件夹存放CSS, ...

  6. rest_framework 访问频率(节流)流程

    访问频率流程 访问频率流程与认证流程非常相似,只是后续操作稍有不同 当用发出请求时 首先执行dispatch函数,当执行当第二部时: #2.处理版本信息 处理认证信息 处理权限信息 对用户的访问频率进 ...

  7. portainer,用于管理docker swarm,好像也不错哟

    shipyard的模式,好像在docker 1.12之后,没有啥用武之地了,也没有更新. 接下来,集群管理和调度,最有知名度的就是rancher了. 在rancher之前,我们试一下portainer ...

  8. 让你的mysql或mariadb 支持ipv6

    如果你在windows 或Linux系统已经安装了mysql/mariadb,并且操作系统本身已经支持了ipv6. 在/etc/my.conf 这样配置可以让mysql也支持ipv6 [mysqld] ...

  9. python的函数定义中99%的人会遇到的一个坑

    列表是一种经常使用的数据类型.在函数的定义中,常常会使用列表作为参数. 比如,要测试一个接口的数据,接口返回的数据格式如下: { "code": "20000" ...

  10. sed 概述

    sed 是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送 ...