很多小伙伴对计算机编程的算法感兴趣,但在很多竞赛类算法网站中,大数运算往往是必考的,而课本有基本未提及,所以,今天来提供算法的基本运算的源码(加减)。
对于大多数大数运算,往往是超出int 的范围,比如有2的100次方,100的100次方等等,或是超过题目内存限制,这时大数运算就能大展身手,其实,大数运算其实就是字符串的运算,再将其与结构体相结合。所以,对字符串和结构体还不熟悉的小伙伴建议先去复习这两方面的知识点。废话不多说,献上代码

#include<iostream>
#include<string.h>   //注意包含此头文件
using namespace std;
struct beg  //首先定义结构体
{int d[1000];  //存储每个数码 int len;   //记录大数长度 beg()  //构造函数初始化结构体 {memset(d,0,sizeof(d));len=0;}
};
struct beg change(char str[]);
struct beg add(beg a,beg b);
struct beg sub(beg a,beg b);
void show(struct beg c);
int com(beg a,beg b);int main()
{beg a,b,c;char str1[1000],str2[1000];cin>>str1;cin>>str2;a=change(str1);b=change(str2);c=add(a,b);show(c);int i;i=com(a,b);if(i<0)   //若为负数,交换两个结构体变量 {struct beg temp;temp=a;a=b;b=temp;c=sub(a,b);cout<<"-";  //记得添负号 show(c); }else {c=sub(a,b);show(c);}return 0;
}
//转换函数,将字符型转换为整型
struct beg change(char str[])
{beg a;a.len=strlen(str);for(int i=0;i<a.len;i++){a.d[i]=str[a.len-i-1]-'0';   //字符转整型}return a;
}
//加法函数
struct beg add(beg a,beg b)
{beg  c;int carry=0;  //carry用来记录进位情况,初始位0 for(int i=0;i<a.len||i<b.len;i++){int temp=a.d[i]+b.d[i]+carry;   //当前位想加再加进位 c.d[c.len++]=temp%10;   //得到余数 carry=temp/10;  //下一个进位情况 }if(carry!=0)  //若最高位不为0 {c.d[c.len++]=carry;}return c;
}
//减法函数(注意是大减小)
struct beg sub(beg a,beg b)
{beg c;for(int i=0;i<a.len||i<b.len;i++){if(a.d[i]<b.d[i])   //若遇到当前位不够减的情况 {a.d[i+1]--;   //向更高位借1 a.d[i]+=10;  //再当前位加10 }c.d[c.len++]=a.d[i]-b.d[i];   //进行减法 }while(c.len-1>=1&&c.d[c.len-1]==0){c.len--;   //去除高位为0的情况,同时确保有最低位 }return c;
}
//输出函数
void show(struct beg c)
{for(int i=c.len-1;i>=0;i--){cout<<c.d[i];}cout<<endl;
}
//比较大小函数
int com(beg a,beg b)
{if(a.len>b.len)   return 1;else if(a.len<b.len)   return -1;else {for(int i=a.len-1;i>=0;i--){if(a.d[i]<b.d[i])   return -1;else  if(a.d[i]>b.d[i])   return 1;}}return 0;
}

算法之大数运算加减法源代码相关推荐

  1. SM2椭圆曲线公钥密码算法的C语言实现(基于Miracl大数运算库)

    SM2椭圆曲线公钥密码算法的C语言实现(基于Miracl大数运算库) 实验环境 预备知识 FpF_pFp​ 及椭圆曲线 素域 FpF_pFp​ FpF_pFp​ 上的椭圆曲线 FpF_pFp​ 上椭圆 ...

  2. java大数运算详解【其三】大数乘法之平方算法之按位二次展开式算法

    目录 java大数运算详解[其一]大数加减法 java大数运算详解[其二]大数乘法 java大数运算详解[其三]大数乘法之平方算法之按位二次展开式算法 java大数运算详解[其四]大数乘法之平方算法之 ...

  3. 《RSA与大数运算》

    标 题:<RSA与大数运算> 发信人:afanty 时 间:2003/04/28 04:50pm 详细信息: 基于以下原因,俺估计RSA算法会被越来越多的共享软件采用: 1.原理简洁易懂 ...

  4. 大数算法之大数加减法

    大数算法之大数加减法 当我们第一次编程,成功地在黑洞洞的控制台窗口中打印出"Hello World"的字符后,准备编写的第一个有实用性的程序是什么?我想,对于大多数人而言,这一问题 ...

  5. 【算法】大数乘法问题及其高效算法

    题目 编写两个任意位数的大数相乘的程序,给出计算结果.比如: 题目描述: 输出两个不超过100位的大整数的乘积. 输入: 输入两个大整数,如1234567 和 123 输出: 输出乘积,如:15185 ...

  6. RSA大数运算实现(1024位n)(5)蒙哥马利模幂

    文章目录 简介 算法 说明 符号定义 蒙哥马利模乘 蒙哥马利模乘算法 蒙哥马利约简 REDC(T)算法 效率 代码实现 REDC 蒙哥马利模乘 模幂 运行结果 简介   在之前的(1)--(4)中,一 ...

  7. 学习笔记:JAVA大数运算(数组方法)

    提到大数运算,JAVA绝对赖皮,不像C,JAVA自带大整数(java.math.BigInteger)的库.这方面也是了解了一下,关于大整数,这一篇文章还是讲的很全面的:(6条消息) Java 大数字 ...

  8. C语言学习趣事_之_大数运算_加法

    C语言学习趣事_大数运算_之加法 1.引子    在C语言中,因为预定义的自然数类型的大小是有上下限度的,这就决定了在进行数的运算的时候,必然受到限制,同时因为C语言是最接近汇编的一种程序设计语言,并 ...

  9. java中大数开方_Java中的大数运算

    # 一:大数运算出现的背景 java里面整型int与浮点型float,double它们存放数据的范围是有限的,当出行更大的数值时会发生溢出. 最典型的场景是金融行业,直接使用单精度或者双精浮点数来表示 ...

最新文章

  1. 数学建模学习笔记——蒙特卡洛模拟
  2. React-native 环境配置过程与搭建项目问题汇总
  3. JAVA随机存储_java-如何将随机整数存储到类的实例中
  4. Server 2008 配置共享文件服务器--权限配置
  5. 易语言动画框和动画物体通过代码载入外部图片数据不显示!
  6. 大学四年, 专业心得
  7. Android深入源代码分析理解Aidl总体调用流程(雷惊风)
  8. c语言建立顺序表 存储并输出,请教数据结构课程中怎么建立顺序表,显示,输出,从头到尾详细点最好加讲解,希望大家能帮这个小忙...
  9. linux部署前后端分离项目命令笔记
  10. jQuery - Ajax解决跨域问题
  11. 罗技无法使用计算机上的配置文件,罗技游戏软件检测不到游戏启动,导致无法自动切换配置文件...
  12. rar和zip文件加密的破解
  13. JAVA 异或校验byte数组
  14. Yolo系列 | Yolov4v5的模型结构与正负样本匹配
  15. ViewPager翻页动画失效详解
  16. ArcGIS Server 发布服务失败
  17. DataTable转换为ListT或者DataRow转换为T
  18. 小白学编程必备的三大网站
  19. Solidity入门-开发众筹智能合约
  20. macbook视频格式转换_告别格式工厂的视频格式转换方法(mac版 命令行)

热门文章

  1. Informix 12.10版本新特性-2
  2. Javascript数组部分
  3. VMR论文visualization实验总结
  4. php压缩中文文件,phpzip压缩中文文件时候出现压缩无大小或无法压缩
  5. Vs2008编译vtk5.10详细教程
  6. Flutter 不一样的跨平台解决方案
  7. 通达信期货程序化交易接口是什么?
  8. 大数据:数据仓库设计
  9. 一文搞懂 Traefik2.1 的使用
  10. 耿建超英语语法---定语从句