YTU.2326: 大數的乘法【陣列】
阿新 • • 發佈:2018-12-20
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)); } }