对于整形依次为int, long int, long long int。表示范围如下:

类型 字节数 表示范围
int 4 -2147483648~+2147483647
long int 4 -2147483648~2147483647
long long int 16 -9223372036854775808~+9223372036854775807

  但有的情况使用long long int 也无法表示,这个时候要使用数组的表示形式。整体的计算方法与手工计算顺序一致,数A的每一位与数B相乘再相加(注意数A的每一位要记得乘以10),做加法的时候要处理好进位的关系。
  源代码如下:

#include<iostream>
#include<iomanip>
#include<vector>
#include<string>
#include<fstream>
using namespace std;void bigNumMul(long int x,long int y)
{int a[64] = {0};int b[64] = {0};int c[64] = {0};long t;if(x<y)  // 保证x是大的那一个 {t = x;x = y;y = t; } long m = x;int a_num = 0;//把x每位数分别存入数组for(int i=0; i<64; i++){a[i] = m%10;a_num++;m = m / 10;if(m == 0)break;}long n = y;int b_num = 0;//把y每位数分别存入数组for(int i=0; i<64; i++){b[i] = n%10;b_num++;n = n/10;if(n == 0)break;}//中间数的存放位为num+1const int _a_num=a_num+1;vector<int>mid_val; // 最好使用vector, 静态整形数组还是有长度限制,空间可能会爆 for(int i=0;i<_a_num;i++){mid_val.push_back(0);}// 乘法操作 for(int i=0; i<b_num; i++){   int backAdd = 0;//backAdd为乘积的进位数// 一位乘一行 for(int j=0; j<=a_num; j++){int product = a[j]*b[i];//两个位数乘积int sum = product + backAdd;mid_val[j] = sum%10;backAdd=sum/10;}// 一行加一行 backAdd = 0;//一行积的一位与另一行积的一位相加的进位数for(int k=i; k<=i+a_num; k++) // 从i开始是为了符合,乘法每高位依次向左移 {int sum = c[k] + mid_val[k-i] + backAdd;c[k] = sum % 10;backAdd = sum / 10;}}// 放入是是倒叙放入,查找的时候也需要倒着 int startBit=0;for(int i=63;i>=0;i--){if(c[i]!=0){startBit=i;break;}}for(int i=startBit;i>=0;i--){cout<<c[i];}
}int main(void)
{bigNumMul(2147483647,2147483647);return 0;
}

参考博客:

https://blog.csdn.net/tsinfeng/article/details/5939395

https://blog.csdn.net/xcrazyu/article/details/87879103

C语言,两个超大整型数乘法相关推荐

  1. 输入两个由整型数构成的集合(元素个数均为5)分别放到数组A和B中,求这两个集合的交集(交集的元素由两个集合中的相同元素构成),最后输出交集中的元素。

    [问题描述]输入两个由整型数构成的集合(元素个数均为5)分别放到数组A和B中,求这两个集合的交集(交集的元素由两个集合中的相同元素构成),最后输出交集中的元素,要求在主函数中输入A和B数组,并输出交集 ...

  2. 数据结构 - 线性表(顺序表)C语言代码实现-处理整型数据(附详细解释)。 _清风明月

    #include <stdio.h> #include <conio.h> //conio是Console Input / Output(控制台输入输出)的简写,其中定义了通过 ...

  3. 【C语言初学】打印整型数组的方法

    文章目录 前言 方法一.数组接受的方式 方法二.指针接受的方式 方法三.数组指针的方式 前言 本文是作为C语言初学者,将之间学到的几种打印整形数组的方法整理到这篇文章中. 提示:以下是本篇文章正文内容 ...

  4. C语言之将长整型数中每一位上为奇数的数依次取出,构成一个新数放在t中。高位仍在高位,低位仍在低位。

    代码如下所示: void fun(long s, long* t)//定义一个类型为long的指针指向w {int s1 = 1, d;*t = 0;while (s > 0){d = s % ...

  5. 大数计算器概念c语言,用C语言求两个超大整数的和

    用C语言求两个超大整数的和 在生活中,我们经常需要计算非常大的数,但是任何一种计算器都有计算范围,一旦超过计算范围就会有精度的损失.或许有同学认为我们可以通过程序来解决,比如对于C语言来说,我们定义一 ...

  6. c语言用编译器求两个整数之和的代码,使用OC语言编撰两个超大数相乘或相加的算法的思路和超大正整数相乘的代码...

    使用OC语言编写两个超大数相乘或相加的算法的思路和超大正整数相乘的代码 正文: 在编程中,无论是OC还是C亦或是C++语言,所声明的整数变量都会在内存中占有固定的存储空间,而这些存储空间都是固定的. ...

  7. C语言的数据类型大全,整型数据在内存中的存储方式

    一.数据类型 通过长时间的学习C语言以及代码的编写,我掌握了很多很多的数据类型,下面就给大家罗列一下. 1.内置数据类型 char        //字符数据类型--                  ...

  8. C语言深度剖析——关键字sizeof、整型数据存储深入、数据类型取值范围深入

    1.关键字sizeof sizeof 与 strlen 是我们日常打代码时经常使用到的两个"工具".前者是求变量或者类型的大小(单位为字节),后者是求某一字符串的长度.我们很容易产 ...

  9. C语言编程>第六周 ① 编写一个录入函数:用来从键盘接收n个整型数并存放在一个整型数组中。 在主函数中调用该函数计算出这n个整数之和。

    例题:编写一个录入函数:用来从键盘接收n个整型数并存放在一个整型数组中. 在主函数中调用该函数计算出这n个整数之和. 代码如下: /*代码分析:录入函数需要两个参数:一个参数是需要用来存储数字的数组, ...

最新文章

  1. Python实现贪吃蛇小游戏(双人模式)
  2. oracle创建 number,oracle创建表的方法和一些常用命令
  3. 【转】Win7、Ubuntu双系统正确卸载Ubuntu系统--不错
  4. MFC 实现字符串的移动
  5. 标准非STL容器 : bitset
  6. flume案例-网络数据采集-Flume的配置
  7. 高考计算机会考基础知识点,2017高考一定会考的46个知识点!
  8. 关联规则mlxtend的应用
  9. GCC一些有用的技巧
  10. java restful返回json_java 调用接口的时候报的错 用的是restful的post方式,请求返回的是json...
  11. qrcode生成带logo的二维码(插件,示例代码)
  12. 【预测模型】基于狼群算法优化BP神经网络实现预测matlab源码
  13. steam令牌 未能连接到服务器,连接错误无法连接到steam网络怎么办 steam网络连接错误解决方法【图文】...
  14. Mac 安装Gradle教程
  15. 第二章—v-directive自定义指令
  16. document.referrer和history.go(-1)退回上一页区别
  17. 某音提取真机cookie,cookie参数解密
  18. 有什么哪些便宜的云服务器推荐?
  19. 学C语言,C++是自学好还是去培训机构?
  20. 什么叫做POJO类?

热门文章

  1. jsonpath 判断是否包含_mysql json 判断某个key是否存在
  2. KICAD | 分享一个必须安装的插件Interactive HTML BOM plugin for KiCad
  3. RTX5 | 配置文件RTX_Config.h(二)
  4. android 点击两次退出,Android实现点击两次返回键退出
  5. Linux基础学习四:Linux常用的命令(非常详细)
  6. ThinkPHP6项目基操(7.模型)
  7. thinkphp js带参数跳转页面
  8. Android逆向文档阅读笔记-Android Application Fundamentals
  9. Windows破解逆向-CrackMe_1实例(使用IDA Pro修改静态区资源)
  10. cuda笔记-GPU多线程的奇偶排序