1. 程式人生 > >YTU.2326: 大數的乘法【陣列】

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));
    }
}