51Nod_1027 大数乘法
http://www.51nod.com/Challenge/Problem.html#!#problemId=1027
题目
给出2个大整数A,B,计算A*B的结果。
输入
第1行:大数A;第2行:大数B。(A,B的长度 <= 1000,A,B >= 0)
输出
输出A * B
样例输入
123456
234567
样例输出
28958703552
分析
C C++使用字符数组,Java使用大数类
C语言程序
#include<stdio.h>
#include<string.h>
#define N 10000
char a[N+1];
char b[N+1];
int c[N];
int sa[N];
int sb[N];
int sc[N];
int main()
{
int i,j,k;
scanf("%s",a);
scanf(" %s",b);
int alen=strlen(a);
int blen=strlen(b);
memset(sa,0,sizeof(sa));
memset(sb,0,sizeof(sb));
for(i=0;i<alen;i++)
sa[i]=a[alen-i-1]-'0';
for(i=0;i<blen;i++)
sb[i]=b[blen-i-1]-'0';
int carry,end,pos;
for(i=0;i<alen;i++){
memset(c,0,sizeof(c));
pos=i;
carry=0;
for(j=0;j<blen;j++){
c[pos]=sb[j]*sa[i]+carry;
carry=c[pos]/10;
c[pos++]%=10;
}
while(carry){
c[pos++]=carry%10;
carry/=10;
}
if(i==0){
end=pos;
for(k=0;k<pos;k++)
sc[k]=c[k];
}
else{
end=end>pos?end:pos;
carry=0;
for(k=i;k<end;k++){
sc[k]=sc[k]+c[k]+carry;
carry=sc[k]/10;
sc[k]%=10;
}
while(carry){
sc[end++]=carry%10;
carry/=10;
}
}
}
for(j=end-1;j>=0;j--)
printf("%d",sc[j]);
printf("\n");
return 0;
}
Java程序
import java.util.Scanner;
import java.math.*;
public class Main{
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
BigInteger a,b;
a=sc.nextBigInteger();
b=sc.nextBigInteger();
System.out.println(a.multiply(b));
sc.close();
}
}