【C语言】大数相乘
来源:互联网 发布:下载itunes软件 编辑:程序博客网 时间:2024/05/01 18:00
今天抽空复习了一下,用C语言实现的大数相乘的相关算法。
算法代码如下:
<span style="font-size:18px;"># include<stdio.h># include<string.h># include<malloc.h>void multiply(char* a,char* b,char* c){int i,j,ca,cb,* s;ca = strlen(a);cb = strlen(b);s = (int*)malloc(sizeof(int)*(ca+cb));for ( i = 0; i < ca+cb; i++){s[i] = 0;}for ( i = 0; i < ca; i++){for ( j = 0; j < cb; j++){s[i+j+1] += (a[i]-'0')*(b[j]-'0');}}for ( i = ca+cb-1; i >= 0; i--){if ( s[i] >= 10){s[i-1] += s[i]/10;s[i] %= 10;}}i = 0;while ( s[i] == 0){i++;}for ( j = 0; i < ca+cb; i++,j++){c[j] = s[i] + '0';}c[j] = '\0';free(s);}</span>
用字符数组存储大数字, a 和 b 数组分别代表两个相乘的数字,c 是最终的返回结果。
这段程序通过模拟我们运算的过程达到运算的目的。最精髓的地方在于
s[i+j+1] += (a[i]-'0')*(b[j]-'0');
在我们做数字运算的时候,可以参考一下过程:
1 2 3
X 1 2 3 4
—————————————————————
4*1 4*2 4*3
3*1 3*2 3*1
2*1 2*2 2*3
1*1 1*2 1*3
—————————————————————
之后判断大于 10 进位,加和,得到最终的结果。
疑问:为什么最多就是 i+j 位数呢? 两个数相乘 一个 n 位 * m 位 结果的位数为 [n+m-1,n+m]
而之所以从 1 开始是为了预留最高位。
0 0
- C语言:大数相乘.
- 【C语言】大数相乘
- C语言大数相乘
- C语言大数相乘
- 大数相乘(C语言)
- 大数相乘-C语言实现
- 大数相乘C语言代码
- c语言实现大数相乘
- 【C语言代码】大数相乘
- C语言 大数相乘法
- C语言 乘法 大数相乘
- C语言实现大数相乘
- C语言大数相乘A × B problem
- 大数相乘 +方法2(C语言)
- C语言大数相乘的问题
- C语言中的大数相乘问题
- C语言实现两个大数相乘
- C语言精度计算——大数相乘
- uboot 环境变量实现简析
- JSON解析工具-org.json使用教程
- 迷你股指期货
- 进程资源和进程状态 TASK_RUNNING TASK_INTERRUPTIBLE TASK_UNINTERRUPTIBLE
- 学习RSS2.0规范
- 【C语言】大数相乘
- UNP 学习笔记2
- Processing 入门
- C# 匿名方法 (转)
- 提高SQL执行效率的16种方法
- HDU 又一版 A+B
- Eclipse安装Maven插件
- 基础练习2_01字串
- C++,视觉交互,算法,vs2012,matlab2014a,opencv,Android,come on!20141010-理解c++