您的位置:首页 > Web前端

大数乘法的实现

2009-12-08 17:56 417 查看
1234567890987654321234567890987654321 x 2345678909876543211234567890987654321

这是一道乘法题。

 

一开始我们讨论用一个char类型来代表2位数,因为一个char最大可以表示255。后来我们觉得这样不行,因为,进位的时候会非常麻烦。最后折中,用一个char表示1位。

最后的解决方案是这样的:

#include <iostream>
#include <memory.h>
#include <string.h>
using namespace std;
bool buffer_init(char*);
char* single_mult(char*, char*);
/**
* @fun-name:	single_mult
* @parameter1:	>char*	乘数
* @parameter2:	>char*	被乘数
* @return char*: 返回结果的缓冲区地址
*/
char* single_mult (char* para1, char* para2) {
int len_para1 = strlen(para1);
int len_para2 = strlen(para2);
int top = len_para1 + len_para2 - 1;
cout << "size of para1 is " << len_para1 << endl;
cout << "size of para2 is " << len_para2 << endl;
char* result = new char[len_para1 + len_para2];
memset(result, 0, len_para1 + len_para2);
char* tempBuffer = new char[len_para1];
cout << (8/10) << endl;
for (int i = len_para2-1; i >= 0; i-- ) {
// 将para2中的每一位与para1的每一位去相乘
// 并将结果保存在一个临时缓冲区中。
for (int j = len_para1-1; j >= 0 ; j--) {
tempBuffer[j] = (para1[j] - '0') * (para2[i] - '0');
cout << (int)tempBuffer[j] << ' ';
}
cout << endl;
// 将结果移位相加
for (int j = len_para1-1; j >= 0; j--) {
result[i+j+1] += tempBuffer[j];
cout << (int)result[i+j+1] << ' ';
}
cout << endl;

for (int j = len_para1-1; j >= 0;  j--) {
if ( (result[j+i+1] / 10) > 0) {
cout << "进位操作" << (int)result[j+i+1] << endl;
result[j+i] += result[j+i+1] / 10;
result[j+i+1] = result[j+i+1] % 10;
}
}
}

delete [] para1;
delete [] para2;
delete [] tempBuffer;
return result;
}
int main(){
char* para1 = "123456789";
char* para2 = "987654321";
int length = strlen(para1) +strlen(para2);
char * result = single_mult(para1, para2);
for ( int i = 0; i < length; i++)
{
cout << (int)result[i];
}
delete [] result;
return 0;
}


 

欢迎拍砖
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  delete buffer