大数を掛け合わせる
2701 ワード
/*
Name:
Copyright:
Author:
Date: 25/08/12 19:10
Description:
Reference: http://blog.csdn.net/jianzhibeihang/article/details/4948267
*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define Max_Size 200
int main()
{
int a[Max_Size] = {0};
int b[Max_Size] = {0};
int i=0,j=0,k=0;
int al=0;
int bl=0;
int result;
//input the number a
printf("please input a
");
while((a[al] = getchar()) != '
')
{
if(a[al] >= '0' && a[al] <= '9')
{
a[al] = a[al] - '0';
al++;
}
else {
printf("intput error");
exit(0);
}
}
printf("the number a is ");
for(i=0;i<al;i++) printf("%d",a[i]);
printf("
");
//input the number b
printf("please input b
");
while((b[bl] = getchar()) != '
')
{
if(b[bl] >= '0' && b[bl] <= '9')
{
b[bl] = b[bl] - '0';
bl++;
}
else {
printf("intput error");
exit(0);
}
}
printf("the number b is ");
for(i=0;i<bl;i++) printf("%d",b[i]);
printf("
");
//reverse the array of a and b
int at[Max_Size]={0};
int bt[Max_Size]={0};
int c[Max_Size*2]={0};
for(i=0;i<al;i++) at[i] = a[i];
for(i=0;i<bl;i++) bt[i] = b[i];
memset(c,0,Max_Size*2);
for(i=0;i<al;i++)
{
a[i] = at[al-i-1];
}
printf("
");
for(i=0;i<bl;i++)
{
b[i] = bt[bl-i-1];
}
//multi a and b
if(al > bl)
{
k=al;
for(i=bl;i<k;i++) b[i]=0;
}
else if(al < bl){
k=bl;
for(i=al;i<k;i++) a[i]=0;
}
else k=al;
for(i=0;i<k;i++)
for(j=0;j<k;j++)
{
c[i+j] += a[i]*b[j];
}
for(i=0;i<2*k+1;i++)
{
c[i+1] += c[i]/10;
c[i] = c[i] %10;
}
if(c[al+bl-1]!=0) printf("%d",c[al+bl-1]);
for(i=al+bl-2;i>=0;i--)
{
printf("%d",c[i]);
}
getchar();
}