拼多多笔试题:大数据乘法

来源:互联网 发布:淘宝客cms选哪个好 编辑:程序博客网 时间:2024/04/28 23:52

吭哧吭哧写了好一会儿,还是没写出来

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

原创粉丝点击