double 乘法_趣味编程第三弹~大数乘法!

a54293bd407730907a682d64ca76c7bd.png

大数乘法

WINTER

2020

11ebd259f488d9d7c43e17448f2033a9.png 62dc45a1-c059-eb11-8da9-e4434bdf6706.svg 62dc45a1-c059-eb11-8da9-e4434bdf6706.svg

问题描述

62dc45a1-c059-eb11-8da9-e4434bdf6706.svg 62dc45a1-c059-eb11-8da9-e4434bdf6706.svg

众所周知,C语言中Int类型的数值是有上限的,因此我们需要计算两个大数的乘法的时候就不能使用Int。然而,double类型即使在整数计算时也会有精度损失的问题而导致结果不太准确。那么,我们该如何实现大数之间的乘法呢?

(题目来源:20级软件工程面试真题)

62dc45a1-c059-eb11-8da9-e4434bdf6706.svg 62dc45a1-c059-eb11-8da9-e4434bdf6706.svg

方法详解

62dc45a1-c059-eb11-8da9-e4434bdf6706.svg 62dc45a1-c059-eb11-8da9-e4434bdf6706.svg

(算是我自己口胡吧)

(由于我还没有学数组,就不写代码了略略略)~~(好吧是我懒)~~

方法一:模拟竖式乘法

ZJUMSC

设置三个数组a[ ] b[ ] c[ ],其中a[ ] b[ ]分别倒着储存两个大数的数字。

例如:

123456789-->a[ 1 ] = 9  a[ 2 ] = 8······a[ 9 ] = 1 

a[ 10 ] = 0  a[ 11 ]=0 ······

构建循环,以b为循环变量,循环次数为第二个大数的位数。

内部再套一个循环,用来将a[ i ]从1循环到最大位数。

然后用a[ i ] \ * b[ 1 ],由于最大的情况是9 \ * 9 + 8(这个8来自上一个的进位)= 89,也就是说只可能答案是两位数,因此很安全。

于是   

c[ i+1 ]=c[ i+1 ]+a[ i ]*b[ 1 ] / 10      

c[ i ]=c[ i ]+a[ i ] \ * b[ 1 ] % 10 (要注意这两句代码的顺序)

最后检查C[ ],如果发现超过10,则向后一位进位。

结果是倒序输出C数组各个下标的数。

方法二:快速傅里叶变换。

ZJUMSC

这个就违背了新手向的初衷了

因此有兴趣的小伙伴们可以自行学习

59780b3f27aca4374ed51ffcd6a9c853.gif

  **(祝小伙伴们高数满绩)**

还有什么新的想法欢迎留言讨论哟~

1c3c436bf5f331215fa61a9e3991a26d.png

扫码关注

ZJUMSC

微信号|ZJUMSC2018

供稿人:李予谦

制作人:沈骏一

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: `double` 是 C 语言中的一种浮点数数据类型,用于存储双精度浮点数,即使用双倍的空间存储浮点数,提高了数值的精度。`double` 变量占用 8 个字节的内存空间,可以表示的数值范围比 `float` 更大,精度也更高。`double` 的定义方式如下: ``` double variable_name; ``` 其中,`variable_name` 为变量名,可以根据需要自行定义。 ### 回答2: 在C语言中,double是一种数据类型,用于表示双精度浮点数。double可以存储比float更大范围和更高精度的浮点数。双精度浮点数是一种表示小数和大数的方式,用于处理需要更高精度的浮点运算。 与float相比,double占用的内存空间更大,通常为8字节(64位),而float为4字节(32位)。这使得double能够表示更大范围内的数值,同时提供更高的精度。 在C语言中,我们可以使用double关键字来声明一个双精度浮点数变量。例如: ```c double num1 = 3.14159; double num2 = 2.71828; ``` 在进行浮点数计算时,使用double类型可以提供更准确的结果。然而,由于double占用更多的内存空间,相应的计算和存储开销也会更大。因此,在一些内存受限的嵌入式系统中,为了节省内存,可能会使用float来替代double。 总而言之,double是C语言中用于表示双精度浮点数的数据类型,它提供了更大范围和更高精度的浮点数操作。这使得我们可以处理更复杂的计算和更精确的结果。 ### 回答3: 在C语言中,double是一种数据类型,用于存储双精度浮点数。它可以表示更大范围和更高精度的实数值,相比于float类型。对于需要较高精度的计算,double类型通常被广泛使用。 double类型在内存中通常占用8个字节(64位),根据IEEE 754标准,它可以表示的数值范围大约为±1.7×10^308,精度大约为15位小数。 在C语言中,可以使用double关键字声明double类型的变量。例如: double number1 = 3.14159; double number2 = 2.71828; 在进行双精度浮点数的计算时,可以使用一系列的内置函数和运算符,例如加法、减法、乘法、除法、指数等运算。它们可以对double类型的变量进行操作,并返回一个double类型的结果。 需要注意的是,由于浮点数的内部表示方式和机器的精度限制,double类型的计算可能存在一定的舍入误差。因此,在比较double类型的变量时,应该尽量避免直接使用相等操作符(==),而应该使用一个误差范围来进行比较。 总之,double类型在C语言中用于存储双精度浮点数,具有更高的范围和精度,常用于需要较高精度计算的场景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值