#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <stdlib.h>
#include <string.h>
using namespace std;
struct bigdatacom
{
protected:
char dataa[100];
char datab[100];
public:
void init(const char* str1, const char* str2)
{
cout << typeid(*this).name() << endl;
strcpy(this->dataa, str1);
strcpy(this->datab, str2);
}
char* getbigdata()
{
int lengtha = strlen(dataa);
int lengthb = strlen(datab);
int* pres = (int*)malloc(sizeof(int)*(lengtha + lengthb));
memset(pres, 0, sizeof(int)*(lengtha + lengthb));
//累乘
for (int i = 0; i < lengtha; i++)
{
for (int j = 0; j < lengthb; j++)
{
pres[i + j + 1] += (dataa[i] - '0')*(datab[j] - '0');
}
}
//进位
for (int i = lengtha + lengthb - 1; i >= 0; i--)
{
if (pres[i] >= 10)//进位
{
pres[i - 1] += pres[i] / 10;//进位
pres[i] %= 10;
}
}
int i = 0;
while (pres[i] == 0)
{
i++;
}
char* lastres = (char*)malloc(sizeof(char)*(lengtha + lengthb));
int j;
for (j = 0; j < lengtha + lengthb; j++, i++)
{
lastres[j] = pres[i] + '0';
}
lastres[j] = '\0';
return lastres;
}
};
struct myclass :public bigdatacom
{
void coutstr()
{
cout << this->dataa << " " << this->datab << endl;
}
};
void main()
{
myclass class1;
class1.init("12345", "1001");
cout << class1.getbigdata() << endl;
class1.coutstr();
}
大数据乘法算法
最新推荐文章于 2019-04-26 12:02:53 发布