| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
万进制的大数乘法,附代码。#include <stdio.h>
#include <string.h>
int num1[10] = {0};
int num2[10] = {0};
int length1 = 0;
int length2 = 0;
char str1[41] = {0};
char str2[41] = {0};
int main()
{
int i = 0, j = 0;
int a[20] = {0};
int b[20] = {0};
int carry = 0;
int result = 0;
int length = 0;
scanf("%s", str1);
scanf("%s", str2);
length1 = strlen(str1);
length2 = strlen(str2);
for(i = length1-1, j = 0; i >= length1%4; i -= 4, j++)
{
num1[j] = (str1[i]-48)+10*(str1[i-1]-48)+100*(str1[i-2]-48)+1000*(str1[i-3]-48);
}
carry = 1;
for(; i >= 0; i--)
{
num1[j] += (str1[i]-48)*carry;
carry *= 10;
}
if(length1%4)
{
length1 = length1/4+1;
}
else
{
length1 = length1/4;
}
for(i = length2-1, j = 0; i >= length2%4; i -= 4, j++)
{
num2[j] = (str2[i]-48)+10*(str2[i-1]-48)+100*(str2[i-2]-48)+1000*(str2[i-3]-48);
}
carry = 1;
for(; i >= 0; i--)
{
num2[j] += (str2[i]-48)*carry;
carry *= 10;
}
if(length2%4)
{
length2 = length2/4+1;
}
else
{
length2 = length2/4;
}
for(i = 0; i < length1; i++)
{
carry = 0;
for(j = 0; j < i; j++)
{
b[j] = 0;
}
for(j = 0; j < length2; j++)
{
result = num1[i]*num2[j]+carry;
b[j+i] = result%10000;
carry = result/10000;
}
if(carry)
{
b[j+i] = carry;
}
for(length = 19; length >= 0; length--)
{
if(a[length] != 0 || b[length] != 0)
{
break;
}
}
carry = 0;
for(j = 0; j <= length; j++)
{
result = a[j]+b[j]+carry;
a[j] = result%10000;
carry = result/10000;
}
if(carry)
{
a[j] = carry;
}
}
for(i = 19; i >= 0; i--)
{
if(a[i] != 0)
{
break;
}
}
if(i < 0)
{
printf("0\n");
}
else
{
printf("%d", a[i--]);
for(; i >= 0; i--)
{
printf("%d", a[i]/1000);
a[i] %= 1000;
printf("%d", a[i]/100);
a[i] %= 100;
printf("%d", a[i]/10);
a[i] %= 10;
printf("%d", a[i]);
}
printf("\n");
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator