拼多多笔试题:大数据乘法
吭哧吭哧写了好一会儿,还是没写出来
import java.util.Arrays;
import java.util.Scanner;/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
while(sc.hasNext()) {
/**
* 12*19=228
* 1 2
* 1
* 9
* 1 2
* 9 18
* 1 2
* 9 18
* 1 11 18
进行进位 2 2 8
*/
String str1=sc.next();
String str2=sc.next();
if(str1.length()>str2.length()) {
String temp=str1;
str1=str2;
str2=temp;
}
int[][] matrix=new int[str1.length()][str2.length()];
for(int i=0;i<str1.length();i++) {
int cur=str1.charAt(i)-'0';
for(int j=0;j<str2.length();j++) {
int temp=str2.charAt(j)-'0';
matrix[i][j]=cur*temp;
}
}
int[][] arr=new int[str2.length()][str1.length()+str2.length()-1];
//进行加法
for(int i=0;i<arr.length;i++){
int n1=i<str2.length()?i:str2.length();
Arrays.
arr[i]=Arrays.copyOfRange(matrix[i], n1, matrix[i].length);
}
int[] result=new int[arr.length];
for(int i=0;i<arr.length;i++) {
int sum=0;
for(int j=0;j<str2.length();j++) {
sum+=arr[i][j];
}
}
// arr[0]=matrix[0][0];
// arr[arr.length-1]=matrix[str1.length()-1][str2.length()-1];
//
// // arr[0]=matrix[0][0];
// // arr[1]=matrix[0][1]+matrix[1][1-1];
// //arr[2]=matrix[0][2]+matrix[1][2-1]+matrix[2][2-2];
//
// //arr[k]=matrix[0][k]+matrix[1][k-1]+matrix[2][k-2]...
//
// //arr[n-1]=matrix[n1-2][n2-1]+matrix[n1-1][n2-2];
// //arr[n]=matrix[n1-1][n2-1];
// //一共要加两次
// for(int i=0;i<str1.length();i++) {
// int sum=0;
// for(int j=i;j>=0;j--) {
// sum+=matrix[i-j][j];
// }
// arr[i]=sum;
// }
// // 1 2 3
// // 1 2
// // 1 2 3
// // 2 4 6
// for(int i=str1.length();i<str2.length();i++) {
// int sum=0;
// for(int j=0;i<matrix.length;i++) {
// sum+=matrix[str.]
// }
// }
// 1 11 18
int jin=0;
for(int i=result.length;i>=0;i--) {
int sum=result[i]+jin;
if(sum>10) {
jin=sum/10;
result[i]=sum%10;
}
}
if(jin>0) {
System.out.print(jin);
}
System.out.println(result);
}
}
}
看了别人的代码后的大数据乘法,很是简洁。为什么我没想出来?没有找到乘法的规律
import java.util.Arrays;
import java.util.Scanner;
/**
* Definition for singly-linked list. public class ListNode { int val; ListNode
* next; ListNode(int x) { val = x; next = null; } }
*/
public class huawei {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
String str1=sc.next();
String str2=sc.next();
char[] str1Arr=str1.toCharArray();
char[] str2Arr=str2.toCharArray();
int[] newArr=new int[str1.length()+str2.length()-1];
for(int i=0;i<str1Arr.length;i++){
for(int j=0;j<str2Arr.length;j++){
newArr[i+j]+=(str1Arr[i]-'0')*(str2Arr[j]-'0');
}
}
for(int j=newArr.length-1;j>0;j--){
newArr[j-1]+=newArr[j]/10;
newArr[j]=newArr[j]%10;
}
outPut(newArr);
}
sc.close();
}
public static void outPut(int[] arr){
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]);
}
System.out.println();
}
}