输入:两个字符串表示的大数(正整数),大数的含义是指超过了C++内嵌的数据类型(int,long等等)。
输出:两个数进行乘法的结果。
/*
输入两个数字表示的字符串,计算其乘法的结果
*/
#include <iostream>
#include <string>
using namespace std;
char* GetMUL(const char* a, const char* b)
{
int *pRt = new int[strlen(a) + strlen(b) + 1];
memset(pRt, 0, (strlen(a) + strlen(b) + 1) * sizeof(int));
//逐次对每一次进行乘法操作
for (int i = 0; i < strlen(a); i++)
{
for (int j = 0; j < strlen(b); j++)
{
pRt[i + j + 1] += (a[i] - '0') * (b[j] - '0');
}
}
//进位操作
for (int i = strlen(a) + strlen(b); i >= 0; i--)
{
if (pRt[i] >= 10)
{
pRt[i - 1] += pRt[i] / 10;
pRt[i] %= 10;
}
}
//创建一个字符串,用于对结果的保存
char* str = new char[strlen(a) + strlen(b) + 1];
memset(str, 0, (strlen(a) + strlen(b) + 1) * sizeof(char));
int index = 0;
while (pRt[index] == 0)
index++;
//将结果重新转换成字符串表示
for (int i = 0; index < strlen(a) + strlen(b); i++)
{
str[i] = pRt[index++] + 0x30;
}
delete pRt;
return str;
}
int main()
{
char a[127] = {0};
char b[127] = {0};
char *pRt;
while (std::cin >> a >> b)
{
pRt = GetMUL(a, b);
std::cout <<"a * b = " << pRt << std::endl;
delete pRt;
}
return 0;
}