解决方法就是自己构造数据结构.

可以参考Java中BigInteger的实现.

1. 数据结构中包含 标志位, -1表示负数, 1表示正数, 0表示0.

2. 用一个int数组 表示 这个大数. java里的实现, 数组为mag, 那么mag[0]表示的位数最大, 就是说是反过来看的, 保证mag[0]不为0.

BigInteger中乘法的实现, 和我们平时手算乘法公式类似, 一位一位乘, 要考虑进位. 主要源码如下, 两个int数组相乘得到结果的int数组:

final static long LONG_MASK = 0xffffffffL;

private int[] multiplyToLen(int[] x, int xlen, int[] y, int ylen, int[] z) {

int xstart = xlen - 1;

int ystart = ylen - 1;

if (z == null || z.length < (xlen+ ylen))

z = new int[xlen+ylen];

long carry = 0;

for (int j=ystart, k=ystart+1+xstart; j>=0; j--, k--) {

long product = (y[j] & LONG_MASK) *

(x[xstart] & LONG_MASK) + carry;

z[k] = (int)product;

carry = product >>> 32;

}

z[xstart] = (int)carry;

for (int i = xstart-1; i >= 0; i--) {

carry = 0;

for (int j=ystart, k=ystart+1+i; j>=0; j--, k--) {

long product = (y[j] & LONG_MASK) *

(x[i] & LONG_MASK) +

(z[k] & LONG_MASK) + carry;

z[k] = (int)product;

carry = product >>> 32;

}

z[i] = (int)carry;

}

return z;

}

拿到结果的int数组后, 去除开头的0.

回答@醉酒剑秋(33787218)的问题:

为什么0至xstart-1和xstart要分开,直接放在一个循环里面行不行?

: 这个手工在纸上计算一下543*434就知道, 首先计算543*4, 这里只需考虑每一位的乘, 加上上一次的进位即可; 接着算543*3, 需要考虑每一位的乘, 加上上一次的进位, 再加上 结果位上已有的值. 目测如果初始化结果数组z全为0, 则可以只用下面的那个循环来做; 但是现在两个循环明显效率要高一点点(第一个循环少了+(z[k] & LONG_MASK)), 在这种基础类里性能可是很重要的.

还有为什么或运算0xFFFFFFFFL?直接相乘可以吗

: 是与0xFFFFFFFFL, 注意0xFFFFFFFFL是long型, 这里是把int型转为与它数值相等的long; 否则直接int*int是会溢出的.

更新

还是有些要补充的地方:

1. java里是没有无符号数的, 所以int最大值为0x7fffffff(只用了31bit); 而在上面的程序中, 实际是把int当作了无符号数来用, 充分使用了这32个bit, 所以中间结果的int是作为 (int数)&0xffffffffL来使用的, 从java int型角度来说是会溢出的.

2. 中间结果的long值也是会溢出的, 所以这里用的是无符号右移>>>. -1>>>31 =1

c++语言求100的阶乘,C++-100阶乘相关推荐

  1. 用c语言求出1加到100的和

    //求出1到100的和 #include"stdio.h" int main() { int i,sum=0; //把sum初始定义为0 for(i=1;i<101;i++) ...

  2. C语言求排列组合和阶乘

    关于C语言求排列数.组合数以及阶乘的实验记录: 一.求排列数和组合数 以下公式中A(n,m)为排列数公式,C(n,m)为组合数公式. Cnm=n!m!(n−m)!=Anmm!=Cn−1m+Cn−1m− ...

  3. C语言编程>第二十三周 ⑤ 请补充main函数,该函数的功能是:求1~100(不包括100)以内所有素数的平均值。

    例题:请补充main函数,该函数的功能是:求1-100(不包括100)以内所有素数的平均值. 仅在横线上填写所需的若干表达式或语句,请勿改动函数中的其它任何内容. 代码如下: #include< ...

  4. C语言循环求出2的10次幂,C语言求2的100次幂的结果.doc

    C语言求2的100次幂的结果 求2的100次幂的结果 #include #include #include #include void main void int a,b,i; char s[40], ...

  5. c语言1到200能被4整除,c语言求[100,200]之间能被4整除,不能被5整除的数之和

    C语言求100-500之间的素数.懂的人帮下我, #include#includevoidmain(){inti,j;for(j=101;j 用C语言编程求100-200之间能被3整除但不能被5整除的 ...

  6. C语言 古代经典算术题:百钱百鸡。用100元钱买100只鸡,已知公鸡每只5元,母鸡每只3元,小鸡一元3只,求出所有的卖法。

    C语言 古代经典算术题:百钱百鸡.用100元钱买100只鸡,已知公鸡每只5元,母鸡每只3元,小鸡一元3只,求出所有的卖法. 代码: #include <stdio.h> void main ...

  7. python计算分段函数输出x+2的值怎么写_c语言求分段函数分段函数求解:输入 x ,计算并输出 y 的值:y=x+100 ( 当 x < 20) y= x ( 当...

    题目: c语言求分段函数 分段函数求解:输入 x ,计算并输出 y 的值: y=x+100 ( 当 x < 20) y= x ( 当 2 0 ≤ x ≤ 100) y=x-100 ( 当 x & ...

  8. 使用C语言编写程序一个皮球从100米高度自由落下,每次落地后反弹回原高度的一半,再落下,再反弹。求当它第10次落地时,共经过了多少米?第10次反弹多高?写出完整代码并给出解释并对代码作出注释...

    使用C语言编写程序一个皮球从100米高度自由落下,每次落地后反弹回原高度的一半,再落下,再反弹.求当它第10次落地时,共经过了多少米?第10次反弹多高?写出完整代码并给出解释并对代码作出注释第10次落 ...

  9. 小学 n 阶乘的后面包含多少零c语言,C语言---求n的阶乘后面有多少个连续的0

    C语言---求n的阶乘后面有多少个连续的0 题目描述:给定一个正整数n,返回n的阶乘尾部连续0的个数. 例如:(5,5*4*3*2*1=120,则返回1),(10,10*9*8*7*6*5*4*3*2 ...

  10. C语言——经典200道实例【基础例题100道——进阶例题100道】

    目录: ===============================基础例题100道=============================== 1.输出 "Hello, World!& ...

最新文章

  1. centos python2.7升级到3.7_centos系统升级python 2.7.3
  2. mysql参数优化51cto_超详细MySQL数据库优化
  3. backbone js学习笔记之第三篇Model (续)
  4. cdh 添加jar包_使用maven下载cdh版本的大数据jar包
  5. python磁盘io_python监控磁盘io
  6. (视频) 《快速创建网站》 3.2 WordPress多站点及Azure在线代码编辑器 - 扔掉你的ftp工具吧,修改代码全部云端搞定...
  7. 台式机dp接口_精品导购:你想要的商务台式机 都在这里了!
  8. Redis面试 - Redis 主从架构
  9. 1月2日金象山滑雪(图片)
  10. Linux 命令(50)—— date 命令
  11. [html + css] SVG动画 发光渐变炫彩猫猫头
  12. scrapy 出现400 Bad Request 问题
  13. ubuntu16.04,exFAT格式U盘无法打开解决方式
  14. Windows7 打开任务计划提示“任务计划程序服务不可用。任务计划程序将尝试重新与其建立连接。”解决办法
  15. 江南农村商业银行容器云平台建设经验分享
  16. 熟知ghost参数 恢复系统没烦恼【xpghost】
  17. 【学习笔记】李宏毅2021春机器学习课程第6.2节:生成式对抗网络 GAN(二)
  18. c语言传感器串口通信,树莓派上使用C语言检测触碰传感器
  19. 用POI实现word转html,用到的jar包
  20. Arduino ESP32 flash数据存储结构

热门文章

  1. iPhone中国移动收不到彩信,联通不用设置都可以,具体设置方法:
  2. HTC S510b官方解锁、刷recovery、刷ROOT教...
  3. 普通域账户不能运行金山打字通的解决方案
  4. 应用-单向链表-数据结构和算法
  5. 通达OA软件测试自学,通达OA工作流程及快速入门手册.doc
  6. android-使用环信SDK开发即时通信功能及源码下载
  7. XDOC合同填报解决方案
  8. 环境工程大学生简历模板
  9. 如何成为云计算解决方案架构师
  10. tflearn教程_利用 TFLearn 快速搭建经典深度学习模型