大数运算之乘法
2009-11-09 15:35
453 查看
/* * Author: Leng_que * Date: 2009/11/09 * E-mail: leng_que@yahoo.com.cn * Description: a simple arithmetic unit for compute product of two big positive integer. */ #include <iostream> using namespace std; void reverse(char* data) { char tmp=0; int len = strlen(data); int n_end = int(len/2); for ( int n=0; n<n_end; ++n ) { tmp = data ; data = data[len-n-1]; data[len-n-1] = tmp; } } #define IToA(x) (x+48) #define AToI(x) (x-48) #define M 512 //乘积结果的位数最大值。注:该值应不小于len_a+len_b+1。 void muli(char* a, char* b) { int len_a = strlen(a); int len_b = strlen(b); int len = len_a+len_b; if ( len+1 > M ) { cout<<"保存结果的缓冲区不足……"<<endl; return ; } reverse(a); reverse(b); char ans[M]={0}; memset((void*)ans, '0', len); int i,j; int tens,unit; int n,mul; for ( i=0; i<len_a; ++i ) { for ( j=0; j<len_b; ++j ) { n = i+j; mul = AToI(a[i]) * AToI(b[j]); tens = mul/10; unit = mul%10; //这里考虑到可能有进位 tens += ( AToI(ans )+unit )/10; ans[n++] = IToA( (AToI(ans )+unit)%10 ); if ( ( AToI(ans )+tens )/10 == 1 ) { ans[n++] = IToA(( AToI(ans )+tens )%10); //循环检测进位 while (true) { if ( AToI(ans ) < 9 ) { ans += 1; break; } else { ans[n++] = '0'; } } } else { ans += tens; } } } if ( ans[len-1] == '0' ) { ans[len-1] = 0; } reverse(ans); cout<<ans<<endl; } #undef IToA #undef AToI #undef M //主函数 int main() { char a[]="999999999999999999999999999999999999999999999999999999999999999999123"; char b[]="999999999999999999999999999999999999999999999999999999999999999999777"; muli(a, b); return 0; }
程序运行结果:
999999999999999999999999999999999999999999999999999999999999999998900000000000000000000000000000000000000000000000000000000000000000195571
相关文章推荐
- 大数运算之加法和乘法算法C++模板
- 大数运算,队列实现大数 加法、乘法、除法、模除
- (高精度运算4.7.21)UVA 10106 Product(大数乘法)
- 单链表实现大数加法、大数减法、大数乘法、大数指数运算
- java大数乘法的简单实现 浮点数乘法运算
- 大数运算——加法,减法,乘法 .
- 大数运算之加法乘法---JAVA实现
- (高精度运算4.7.21)UVA 10106 Product(大数乘法)
- VC++大数乘法计算,支持1000位大整数乘法运算
- Java工作利器之常用工具类(二)——数字工具类-大数乘法、加法、减法运算
- 采用分治法进行大数乘法运算 (java)
- Java常用数字工具类 大数乘法、加法、减法运算(2)
- 四:大数运算-乘法运算
- 大数乘法运算
- 模拟乘法运算之N的阶乘(大数阶乘)
- [算法题] 大数乘法运算
- 大数相乘——模拟乘法的运算规则
- 大数乘法运算实现
- 大数运算之乘法函数
- 大数运算之大数乘法