高精度加法(c++)
为什么要用高精度?

有时我们要进行精度较高的运算时,就要使用高精度来进行运算;
就如例题:
大整数加法
时间限制: 1000 ms 内存限制: 65536 KB
提交数: 21965 通过数: 6345
【题目描述】
求两个不超过200位的非负整数的和。
【输入】
有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。
【输出】
一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
【输入样例】
22222222222222222222
33333333333333333333
【输出样例】
55555555555555555555
两个200位的非负整数!就算以long long类型来进行计算也会溢出!
建议:定义两个int类型的数组,数值的下标至少要200,然后用char类型的数组来读,读了再把读入的char数组转换成int类型,如下是代码实现:
int i,j,lena,lenb,x;
int a[205],b[205],c[105];
char t[205],t1[205];
scanf("%s %s",t,t1);
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
for(i=0;i<strlen(t);i++)a[strlen(t)-i]=t[i]-48; //将char类型的t数组转换成int类型的a数组,方法:减去0的ascii码值
for(i=0;i<strlen(t1);i++)b[strlen(t1)-i]=t1[i]-48;
切记!调用memset函数一定要加 #include<string.h>
当然,你也可以加万能头文件 #include<bits/stdc++.h>
将数组读入处理后,就要计算,在此之前,要清空a数组和b数组;从末尾加起,每当a[i]+b[i]>9就要进位;如下是代码实现:
lena=strlen(t);
lenb=strlen(t1);
i=1;
while((i<=lena) or (i<=lenb)){
c[i]=a[i]+b[i]+x;
x=c[i]/10;
c[i]%=10;
i++;
}
敲重点!!!
不要忘记有前导0的存在!!!
下面是我个人常用的一种方法(蒟蒻一枚):
bool f=false;
for(i=N-1;i>=1;i--){
if(a[i]!=0){
if(!f)f=true;
printf("%d",c[i]);
}
else if(f)printf("%d",c[i]);
}
if(!f)printf("0");
printf("\n");
下面是完整的AC程序:
#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
const int N=205;
int main(){
int i,j,lena,lenb,x=0;
int a[N+2],b[N+2],c[N+2];
char t[N+2],t1[N+2];
scanf("%s %s",t,t1);
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
for(i=0;i<strlen(t);i++)a[strlen(t)-i]=t[i]-48; //将char类型的t数组转换成int类型的a数组,方法:减去0的ascii码值
for(i=0;i<strlen(t1);i++)b[strlen(t1)-i]=t1[i]-48;
lena=strlen(t);
lenb=strlen(t1);
i=1;
while((i<=lena) or (i<=lenb)){
c[i]=a[i]+b[i]+x;
x=c[i]/10;
c[i]%=10;
i++;
}
//printf("\n");
c[i]=x;
bool f=false;
for(i=N-1;i>=1;i--){
if(c[i]!=0){
if(!f)f=true;
printf("%d",c[i]);
}
else if(f)printf("%d",c[i]);
}
if(!f)printf("0");
printf("\n");
return 0;
}
高精度加法(c++)的更多相关文章
- NEFU 2016省赛演练一 F题 (高精度加法)
Function1 Problem:F Time Limit:1000ms Memory Limit:65535K Description You know that huicpc0838 has b ...
- java算法 蓝桥杯 高精度加法
问题描述 在C/C++语言中,整型所能表示的范围一般为-231到231(大约21亿),即使long long型,一般也只能表示到-263到263.要想计算更加规模的数,就要用软件来扩展了,比如用数组或 ...
- 用c++实现高精度加法
c++实习高精度加法 最近遇到一个c++实现高精度加法的问题,高精度问题往往十复杂但发现其中的规律后发现并没有那么复杂,这里我实现了一个整数的高精度加法,主要需要注意以下几点: 1:将所需输入的数据以 ...
- 高精度加法——经典题 洛谷p1601
题目背景 无 题目描述 高精度加法,x相当于a+b problem,[b][color=red]不用考虑负数[/color][/b] 输入输出格式 输入格式: 分两行输入a,b<=10^500 ...
- 高精度加法--C++
高精度加法--C++ 仿照竖式加法,在第一步计算的时候将进位保留,第一步计算完再处理进位.(见代码注释) 和乘法是类似的. #include <iostream> #include < ...
- hdu1002 A + B Problem II(高精度加法) 2016-05-19 12:00 106人阅读 评论(0) 收藏
A + B Problem II Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- POJ 3181 Dollar Dayz(全然背包+简单高精度加法)
POJ 3181 Dollar Dayz(全然背包+简单高精度加法) id=3181">http://poj.org/problem?id=3181 题意: 给你K种硬币,每种硬币各自 ...
- leetcode 67. Add Binary (高精度加法)
Given two binary strings, return their sum (also a binary string). For example,a = "11"b = ...
- leetcode 66. Plus One(高精度加法)
Given a non-negative number represented as an array of digits, plus one to the number. The digits ar ...
- SCAU1143 多少个Fibonacci数--大菲波数【杭电-HDOJ-1715】--高精度加法--Fibonacci数---大数比较
/*******对读者说(哈哈如果有人看的话23333)哈哈大杰是华农的19级软件工程新手,才疏学浅但是秉着校科联的那句“主动才会有故事”还是大胆的做了一下建一个卑微博客的尝试,想法自己之后学到东西都 ...
随机推荐
- Chrome DevTools & Slow 3G Network
Chrome DevTools & Slow 3G Network shortcuts https://developers.google.com/web/tools/chrome-devto ...
- AST & js interpreter
AST & js interpreter 抽象语法树 & Javascript 解析器 https://astexplorer.net/ https://esprima.org/dem ...
- Android Kotlin 数据驱动模板
Android开发人员文档: 数据绑定入门 数据绑定库 生成的绑定类 布局和绑定表达式 1. 搭建环境build.gradle:app apply plugin: "kotlin-kapt& ...
- nodejs ECMAScript 模块
node 文档 main.mjs import path from 'path'; import logger from './logger.js'; logger.show('hello world ...
- NGK公链助力医疗行业数据安全
近年来医疗领域的数据泄露事件时有发生,医疗行业数据面临着医疗数据获得不易及缺乏有效管理和数据安全机制问题.而区块链的去中心化.分布式账本等特点正好契合医疗领域的需求点. 医疗数据市场痛点 一.医疗信息 ...
- django学习-3.如何编写一个html页面并展示到浏览器,及相关导入错误的解决方案
1.前言 在django中,视图的概念是:具有相同功能和模板的网页,都可以称为视图.通俗一点来说,就是你平常打开任一浏览器,输入一个地址A后看到浏览器窗口展示出来地址A所对应的页面内容B,页面内容B就 ...
- ASM的基础用法
本文转载自ASM的基础用法 导语 新闻里使用的热补丁修复方案是基于AspectJ,AspectJ是AOP的一种实现. 无意接触到一种小巧轻便的Java字节码操控框架ASM,它也能方便地生成和改造Jav ...
- js获取数字数组最大值的几种方式
原生Math.max方法 Math.max 方法不能接收数组,可以使用ES6的...将数组打散 const arr = [111, 12, 111, 34, 2, 5, 76]; console.lo ...
- 零基础学Python:数据容器
1.常用操作 列表常用操作 在 ipython 中定义一个 列表,例如: l= list() 输入 l. 按下 TAB 键, ipython 会提示 字典 能够使用的函数如下: 可以到官方网址查询使用 ...
- virtualbox多个网卡添加(第5-8块儿)
virtualbox多个网卡添加(第5-8块儿) virtualbox默认只能启用4块网卡,如果4块网卡不够则需要通过命令添加.最多可以增加至8块 创建一个文件run.bat,添加如下内容到文件中,然 ...