博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
面试题之总结-大数运算
阅读量:7071 次
发布时间:2019-06-28

本文共 1765 字,大约阅读时间需要 5 分钟。

hot3.png

解法:既然一个变量无法表示一个超长整数,那么我们使用多个变量好了。当然这使用阵列最为方便,整型数值最大可以存储至65535,为了方便以符合使用十进制的习惯,让每一个阵列元素存储四个位数,也就是0到9999的数,

高位数 低位数
A[0] A[1] A[2] A[3]
1234 5678 2234 5678

 

B[0] B[1] B[2] B[3]
3345 1458 2345 3453

+ - * /加减乘除C[N]用于存放结果

C[0] C[1] C[2] C[3]
???? ???? ???? ????
//超长整数运算研究#include
using namespace std;#define N 1000//大数相加,a:被加数,b:加数,c:运算结果void add(int *a, int *b, int *c){    int i = 0,carry = 0;    for(i = N-1; i >= 0; i--)    {        c[i] = a[i] + b[i] + carry;        if(c[i] < 10000)        {            carry = 0;        }        else//进位        {            c[i] = c[i] - 10000;            carry = 1;        }    }}//大数相减,a:被减数,b:减数,c:运算结果void sub(int *a, int *b, int *c){    int i, borrow = 0;    for(i = N-1; i >= 0; i--)    {        c[i] = a[i] - b[i] - borrow;        if(c[i] >= 0)            borrow = 0;        else  //借位        {            c[i] = c[i] + 10000;            borrow = 1;        }    }}//大数相乘,a:被乘数,b:乘数,c:运算结果//这里的b只是一个正常数,不属于大数,如果是两个大数相乘只能是,先相乘再相加,得到最终结果void mult(int *a, int b, int *c){    int i,tmp,carry = 0;    for(int i = N-1; i >= 0; i--)    {        tmp = a[i] * b + carry;        c[i] = tmp % 10000;        carry = tmp / 10000;    }}//大数相除,a:被除数,b:除数,c:运算结果//如果是两个大数相除,只能通过减的方式,一直减,直到小于减数为止,得到的数是余数,减的次数,就是商//比如 121 30  121-4*30=1,1是余数,4是商void div(int *a, int b, int *c){    int i,tmp,remain = 0;    for(i = 0; i < N; i++)    {        tmp = a[i] + remain;        c[i] = tmp / b;        remain = (tmp%b)*10000;    }}void result(int *c){    for(int i = 0; i < 4; i++)    {        cout << c[i];    }}int main(void){    int a1[N] = {3345,1458,3423,2345};    int b1[N] = {1234,5678,2234,5678};    int c1[N];    add(a1,b1,c1);    result(c1);    sub(a1,b1,c1);    result(c1);    }

转载于:https://my.oschina.net/lucusguo/blog/505336

你可能感兴趣的文章
git笔记之安装使用
查看>>
jquery中的动画
查看>>
用python将MSCOCO和Caltech行人检测数据集转化成VOC格式
查看>>
Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,java 判断请求是不是ajax请求
查看>>
centos/linux下的安装Tomcat
查看>>
ieda 运行web--导入其它jar包
查看>>
[ios]关于ios开发图片尺寸的建议
查看>>
C# IEnumerator的使用
查看>>
Windows获取远程Linux局域网内的mysql连接
查看>>
android BSP与硬件相关子系统读书笔记(1)android BSP移植综述
查看>>
微信中通过页面(H5)直接打开本地app的解决方案
查看>>
在 Win 7或8 下使用 VirtualBOX 虚拟机安装 OS X 10.11 El Capitan 及 Xcode 7.0
查看>>
iOS -- SKPhysicsJointSpring类
查看>>
第三百九十五节,Django+Xadmin打造上线标准的在线教育平台—Xadmin集成富文本框...
查看>>
vim打造开发IDE
查看>>
【Linux】利用Xvfb关闭chrome的图形化输出
查看>>
error: pcap library not found! 解决方法
查看>>
MessageDigest简介
查看>>
Python中内置数据类型list,tuple,dict,set的区别和用法
查看>>
用ESP8266+android,制作自己的WIFI小车(Android 软件)
查看>>