YTU.2326: 大数的乘法【数组】

2326: 大数的乘法【数组】

时间限制: 1 Sec  内存限制: 128 MB
提交: 138  解决: 76
[提交][状态][讨论版][命题人:外部导入]

题目描述

大数是指计算的数值非常大或者对运算的精度要求非常高,用已知的数据类型无法精确表示的数值。例如:我们要计算如下两个数的乘积时,用我们已知的数据类型是无法精确表示其结果的:

 

a1 = 11111111111111111111111111111111111

b1 = 11111111111111111111111111111111111111

求:a1 * b1;

输入

输入两行:每行一个数字,每行的数字不超过100位;

 

输出

输出一行:为这两个大数的乘积

样例输入

1111111111111111111
111111111111111

样例输出

123456790123456666654320987654321

模拟手算过程即可

AC代码:

/*细心!!!*/
#include<bits/stdc++.h>
using namespace std;
char a[101],b[101];
int c[10005];
int main() {
	cin>>a>>b;
	int len1=strlen(a);
	int len2=strlen(b);
	int carry=0;
	int num,m=0;
	for(int i=len2; i>0; i--) {
		carry=0; //新一轮运算进位一定要初始化0!
		m=len2-i;
		for(int j=len1; j>0; j--) {
			int x=b[i-1]-'0';
			int y=a[j-1]-'0';
			num=x*y+carry;
			c[m]+=num;
			if(c[m]>9) {
				carry=c[m]/10;
				c[m]=c[m]%10;
			} else {
				carry=0;
			}
			m++;
		}
		c[m]=carry;
	}
//cout<<m;
	if(c[m]!=0)
		cout<<c[m];
	for(int i=m-1; i>=0; i--)
		cout<<c[i];
	return 0;
}

JAVA代码:

import java.util.Scanner;
import java.math.*;  //BigDecimal  BigInteger
public class Mul {
    public static void main(String args[]) {
       Scanner cin = new Scanner ( System.in );
       BigInteger a,b;
       a = cin.nextBigInteger();
       b = cin.nextBigInteger();
       System.out.println(a.multiply(b));
    }
}

 

posted @ 2018-11-10 15:30  一砂一极乐  阅读(199)  评论(0编辑  收藏  举报