2326: 大数的乘法【数组】
Description
大数是指计算的数值非常大或者对运算的精度要求非常高,用已知的数据类型无法精确表示的数值。例如:我们要计算如下两个数的乘积时,用我们已知的数据类型是无法精确表示其结果的:
a1 = 11111111111111111111111111111111111
b1 = 11111111111111111111111111111111111111
求:a1 * b1;
Input
输入两行:每行一个数字,每行的数字不超过100位;
Output
输出一行:为这两个大数的乘积
Sample Input
1111111111111111111
111111111111111
Sample Output
123456790123456666654320987654321
#include<stdio.h> #include<string.h> #include<stdlib.h> # define N 666 int main() { char a[999],b[999],c[999]; int i,j,k,n,m,s,l1,l2; char aa[999],bb[999]; scanf("%s",&a); scanf("%s",&b); l1=strlen(a); l2=strlen(b); for(i=0;i<l1;i++) { aa[i]=a[l1-1-i]-'0'; //change char to number } for(i=0;i<l2;i++) { bb[i]=b[l2-1-i]-'0';;// change char to number } /*for(i=0;i<l1;i++) { printf("%d",aa[i]); } printf("\n"); for(i=0;i<l2;i++) { printf("%d",bb[i]); } printf("\n");*/ for(i=0;i<N;i++) { c[i]=0; } for(i=0;i<l1;i++) { for(j=0;j<l2;j++) { c[i+j]+=aa[i]*bb[j]; //stimulate * storage in c if(c[i+j]>=10) //carry { c[i+j+1]+=c[i+j]/10; c[i+j]=c[i+j]%10; } } } for(i=l1+l2-1;i>=0;i--) { if(c[i]!=0) break; //find the i != 0 } for(;i>=0;i--) { printf("%d",c[i]); } return 0; }