C语言大数乘法
2015-08-11 16:31
363 查看
学习编程的我们有一个根深蒂固的观念,int占4个字节,4个字节?也就是说int最大能表示的数为42亿多,也就是说最多能表示10位数。对于更多的数呢?没有办法吗?当然,使用long long也是一种解决办法,但这是一种治标不治本的方法。本文介绍一种大数的乘法,也就是说,无论得到或者传入的数有多大,它总能计算出正确的结果。下面给出实现的代码:
#include<stdio.h> #include<stdlib.h> #include<string.h> char *BigDataMutliply(char *DataA, char *DataB) { int alen = strlen(DataA); int blen = strlen(DataB); size_t size = sizeof(int)*(alen + blen); int *TempResult = (int *)malloc(size); char *Result = (char *)malloc(sizeof(char)*(alen+blen+1)); memset(TempResult, 0, size); //multiplicative for (int i = 0; i < alen; i++) { for (int j = 0; j < blen; j++) { TempResult[i + j + 1] += (DataA[i] - '0')*(DataB[j] - '0'); } } for (int i = alen + blen-1; i >0; i--) { if (TempResult[i] >= 10) { TempResult[i-1] += TempResult[i] / 10; TempResult[i] %= 10; } } int i = 0; while (TempResult[i]==0) { i++; } int j; for (j = 0; i < alen + blen; j++, i++) { Result[j] = TempResult[i]+'0'; } Result[j] = '\0'; return Result; } int main() { char a = '1'; char z = '0'; int r = a - z; char *A = "7653121212121454548454545"; char *B = "4465465444545445454546548465454"; char *res=BigDataMutliply(A, B); printf_s("res=%s\n", res); system("pause"); return 0; }至于原理吗,相信你们能看懂的!
相关文章推荐
- C++控制程序只运行一个实例
- C++11 委派构造函数特性怎么使用?
- C语言中,为什么字符串可以赋值给字符指针变量
- C#与C++数据类型对应表
- C#与C++数据类型比较及结构体转换(搜集整理二)
- Music
- 快速排序(C++版)
- C#调用C++的DLL搜集整理的所有数据类型转换方式
- C或C++输入缓冲区问题
- C语言与汇编混合编程
- 黑马程序员——C语言笔记之循环结构
- [LeetCode] Convert Sorted Array to Binary Search Tree
- C语言常用字符串库函数实现
- C++基础知识点
- [LeetCode] Construct Binary Tree from Preorder and Inorder Traversal
- Here's what C++ is
- 智能指针的使用
- C++ Primer 学习笔记_38_STL实践与分析(12)--集成的应用程序容器:文本查询程序
- 黑马程序员——C语言笔记之scanf函数及使用注意事项
- 用C语言判断一个二叉树是否为另一个的子结构