#define MAX_NUMBERS 1024*1024
char* BigMulti(char* first, char* second)
{
//1234567891011121214151617181920*2019181716151413121110987654321
int firstLen = strlen(first);
int secondLen = strlen(second);
char *result = new char[MAX_NUMBERS];
memset( result, 0, MAX_NUMBERS);
int index = 0;
int offset = 0;
for ( int i = secondLen - 1; i >= 0; i-- )
{
int secondNum = second[i] - '0';
for ( int j = firstLen - 1; j >= 0; j-- )
{
int temp = result[offset + firstLen - j -1];
if ( temp > 0 )
{
temp -= '0';
}
int tempResult = (first[j] - '0') * secondNum + temp;
int tempOffset = 0;
do
{
result[offset + firstLen - j - 1 + tempOffset] = tempResult % 10 + '0';
tempOffset++;
temp = result[offset + firstLen - j - 1 + tempOffset];
if ( temp > 0 )
{
temp -= '0';
}
tempResult = temp + tempResult / 10;
}
while(tempResult > 0);
}
offset++;
}
//reverse result
int len = strlen(result);
for ( int i = 0; i < len / 2; i++ )
{
char temp = result[i];
result[i] = result[len-i-1];
result[len-i-1] = temp;
}
return result;
}
int _tmain(int argc, _TCHAR* argv[])
{
char *first = "12345678910111212141516171819201234567891011121214151617181920123456789101112121415161718192012345678910111212141516171819201234567891011121214151617181920123456789101112121415161718192012345678910111212141516171819201234567891011121214151617181920";
char *second = "201918171615141312111098765432120191817161514131211109876543212019181716151413121110987654321";
char *result = BigMulti(first, second);
printf("result is %s\n", result);
return 0;
}
大数相乘算法实现
最新推荐文章于 2020-12-16 21:41:25 发布