C语言实现高精度加法

本篇为高精度加法的计算,接下来我还会去写高精度乘法的计算。

一、高精度运算的概念

高精度运算其实就是参与运算的数完全超出基本数据类型所能表示的范围的运算(例如int型范围就是 - 2147483648 ~+ 2147483647)
所以如果想求较大数的话就要创建新的数据类型

二、数据类型的选取

我选择的是int型数组,这样比较便于计算和理解

三、代码

其中a和b我是通过随机数来赋值

//author   summer_awn
//date    2017/6/20

#include<iostream>
#include<time.h>

#define lenth_a 200
#define lenth_b 200

using namespace std;

//计算a+b
void main() {

 srand((unsigned)time(NULL));

 int * a = new int[lenth_a];//数组a            ******

 for (int i = 0; i < lenth_a; ++i) {

  a[i] = rand() % 10;

 }

 cout << "a=";
 for (int i = lenth_a - 1; i >= 0; --i) {//输出a
  cout << a[i];
 }
 cout << endl;
 cout << endl;

 int * b = new int[lenth_b];//数组b            ******

 for (int i = 0; i < lenth_a; ++i) {

  b[i] = rand() % 10;

 }

 cout << "b=";
 for (int i = lenth_b - 1; i >= 0; --i) {//输出b
  cout << b[i];
 }
 cout << endl;
 cout << endl;

 int lenth_result;//结果的长度en

 if (lenth_a > lenth_b) lenth_result = lenth_a + 1;
 else lenth_result = lenth_b + 1;//通过一个判断来确定结果的长度

 int * a2 = new int[lenth_result];//a2***********

 int * b2 = new int[lenth_result];//b2***********

 memcpy(a2, a, sizeof(int)*lenth_a);//

 memset(a2 + lenth_a, 0, sizeof(int)*(lenth_result - lenth_a));

 memcpy(b2, b, sizeof(int)*lenth_b);

 memset(b2 + lenth_b, 0, sizeof(int)*(lenth_result - lenth_b));

 delete(a);
 delete(b);

 int * result = new int[lenth_result];//result*********

 result[0] = a2[0] + b2[0];

 for (int i = 1; i < lenth_result - 1; ++i) {

  result[i] = a2[i] + b2[i] + result[i - 1] / 10;

  result[i - 1] = result[i - 1] % 10;
 }

 result[lenth_result - 1] = result[lenth_result - 2] / 10;

 result[lenth_result - 2] = result[lenth_result - 2] % 10;

 delete(a2);
 delete(b2);

 cout << "结果=";
 for (int i = lenth_result - 1; i >= 0; --i) {
  cout << result[i];
 }
 cout << endl;

 system("pause");

 delete(result);
}

四、结果

结果有截图,未验证(因为懒)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • C语言菜鸟基础教程之加法

    先动手编写程序: #include <stdio.h> int main() { int a = 1; int b = 2; int c = a + b; printf("sum is %d\n", c); return 0; } 运行结果: sum is 3 程序分析: 先定义一个整型变量a,把1赋值给a. 再定义一个整型变量b,把2赋值给b. 最后定义一个整型变量c,它的值不是靠赋值得到的,而是把a和b相加之后的值赋值给它,即c的值为3.

  • C语言实现高精度的加法

    本文实例为大家分享了C语言实现高精度的加法,供大家参考,具体内容如下 由键盘输入两个位数很长的整数(一行一个,最多不超过80位),试计算并输出这两个数的和. 输入样例 1234567890123456789353534532453453453434534 987654321098765324534534534534532 输出样例 1234567891111111110452299856987987987969066 解题思路: 由于一个普通的变量不能保存十多位长的整数,所以通过数组表示最后的运

  • c语言中用位运算实现加法技巧介绍

    用位运算实现加法也就是计算机用二进制进行运算,32位的CPU只能表示32位内的数,这里先用1位数的加法来进行,在不考虑进位的基础上,如下 复制代码 代码如下: 1 + 1 = 0 1 + 0 = 1 0 + 1 = 1 0 + 0 = 0 很明显这几个表达式可以用位运算的"^"来代替,如下 复制代码 代码如下: 1 ^ 1 = 0 1 ^ 0 = 1 0 ^ 1 = 1 0 ^ 0 = 0 这样我们就完成了简单的一位数加法,那么要进行二位的加法,这个方法可行不可行呢?肯定是不行的,矛盾

  • C语言 解决不用+、-、×、÷数字运算符做加法的实现方法

    题目:写一个函数,求两个整数的之和,要求在函数体内不得使用+.-.×.÷. 分析:这又是一道考察发散思维的很有意思的题目.当我们习以为常的东西被限制使用的时候,如何突破常规去思考,就是解决这个问题的关键所在. 看到的这个题目,我的第一反应是傻眼了,四则运算都不能用,那还能用什么啊?可是问题总是要解决的,只能打开思路去思考各种可能性.首先我们可以分析人们是如何做十进制的加法的,比如是如何得出5+17=22这个结果的.实际上,我们可以分成三步的:第一步只做各位相加不进位,此时相加的结果是12(个位数

  • C语言实现高精度加法

    本篇为高精度加法的计算,接下来我还会去写高精度乘法的计算. 一.高精度运算的概念 高精度运算其实就是参与运算的数完全超出基本数据类型所能表示的范围的运算(例如int型范围就是 - 2147483648 ~+ 2147483647) 所以如果想求较大数的话就要创建新的数据类型 二.数据类型的选取 我选择的是int型数组,这样比较便于计算和理解 三.代码 其中a和b我是通过随机数来赋值 //author summer_awn //date 2017/6/20 #include<iostream>

  • C语言实现高精度加减法

    本文实例为大家分享了C语言实现高精度加减法的具体代码,供大家参考,具体内容如下 首先,我们来看一下C语言中各类型的最值: unsigned int 0-4294967295 int -2147483648-2147483647 unsigned long 0-4294967295 long -2147483648-2147483647 long long的最大值:9223372036854775807 long long的最小值:-9223372036854775808 unsigned lon

  • 使用C++的string实现高精度加法运算的实例代码

    对于超大数字的运算,用long long int仍然不能解决,这时候就需要考虑通过模拟运算和数组存储来实现高精度运算. 本文讨论借助C++的string来实现高精度的运算. 首先输入的量直接存储为string,设为s1和s2. 接下来设计一个反转函数,用于把整个字符串反转(为了方便后续计算). string reverseStr(string input){ string output = ""; for(int i = 0; i < input.length(); i++){

  • c++实现高精度加法

    最近遇到一个c++实现高精度加法的问题,高精度问题往往十复杂但发现其中的规律后发现并没有那么复杂,这里我实现了一个整数的高精度加法,主要需要注意以下几点: 1:将所需输入的数据以字符数组的形式输入,建立字符数组,建立相应的整数数组,然后一一映射,以此来实现数据的输入,需要注意的是,当实现字符向数字映射时,应该减去相应的ASCII偏移值,即48. 2:为了模拟我们在纸上手算的进位模拟运算,我们将字符数组反向填入整数数组,上图的后几行代码实现了这个操作. 3:实现进位加法,这是整个代码的核心部分,需

  • R语言的一个加法函数使用介绍

    我就废话不多说了,大家还是直接看代码吧~ ## R语言中的加法函数 add4 <- function(x, y) { x + y } 一个复杂一些的R语言程序 ## R语言程序 add2 <- function(x, y) { x + y } above10 <- function(x) { use <- x > 10 x[use] } above <- function(x, n) { use <- x>n x[use] } columnmean <

  • 详解C++语言中的加法运算符与赋值运算符的用法

    加法运算符:+ 和 - 语法 expression + expression expression – expression 备注 相加运算符为: 加 (+) 减 (–) 这些二进制运算符具有从左至右的关联性. 相加运算符采用算术或指针类型的操作数.加法 (+) 运算符的结果是操作数之和.减法 (–) 运算符的结果是操作数之差.如果一个操作数是指针或两个操作数都是指针,则它们必须是指向对象的指针,而不是指向函数的指针.如果两个操作数都是指针,则结果没有意义,除非它们是指向同一数组中的对象的指针.

  • 易语言的加法小游戏制作教学

    用易语言制作1~100的加法算数游戏,还可以记录您的分数,下次打开后仍然可以看到您的分数. 1.新建一个Windows窗口程序(如果您已经了解易语言可以不看这里). 2.选择窗口高度和宽度. 3.新建一个按钮,三个编辑框,三个标签 如图: 编辑框2和编辑框1一样. 标签2和标签1一样. 4. 代码:------------------------------.版本 2.程序集 窗口程序集_启动窗口.程序集变量 加数1, 整数型.程序集变量 加数2, 整数型.程序集变量 得数, 整数型.子程序 _

  • C/C++高精度算法的实现

    做ACM题的时候,经常遇到大数的加减乘除,乘幂,阶乘的计算,这时给定的数据类型往往不够表示最后结果,这时就需要用到高精度算法.高精度算法的本质是把大数拆成若干固定长度的块,然后对每一块进行相应的运算.这里以考虑4位数字为一块为例,且输入的大数均为正整数(也可以考虑其他位,但要注意在每一块进行相应运算时不能超出数据类型的数值范围:有负整数的话读入时判断一下正负号在决定运算). 1. 高精度加法 以3479957928375817 + 897259321544245为例: 3479 9579 283

  • C/C++高精度运算(大整数运算)详细讲解

    目录 前言 什么是大整数 大整数的表示 大整数的运算 1.高精度加法 2.高精度减法 3.高精度乘以低精度 4.高精度除以低精度 大整数的表示 补充:使用示例 总结 前言 高精度的运算在算法题尤为常见,在处理一些大型数据的项目中也需要用到.虽然Boost库中有处理高精度问题的模板,但是标准库中并没有.为了方便学习,本文提供了高精度运算的模板,供大家参考. 什么是大整数 众所周知,最大的整型long long的范围是[-9223372036854775808~9223372036854775807

随机推荐