第一题感觉也不用这么麻烦,有小技巧~~~....对于123*456,实际上只要数6*123,5*123,4*123,三个结果里面每个字符的数量就好了(再加上ab本身和a*b本身).
package WY;
import java.util.Scanner;
/**
* 思路:
* 1. 对两个数字逐位计算,假设要计算 a*b,
* 则列式为:
* a[0] a[1] a[2] .. a[N]
* x b[0] b[1] b[2] .. b[N]
*
* 结果第一行是b[N]*a[N] , a[N-1] ... a[1],
*
* 模拟即可,需要考虑进位.
*
*
*/
public class wangyi01 {
public static void main(String[] args){
wangyi01 wangyi01 = new wangyi01();
wangyi01.Input();
}
int N;
// 记录每位的数字出现次数
int[] count = new int[10];
public void Input(){
Scanner in = new Scanner(System.in);
N = in.nextInt();
for(int i=0;i<N;i++){
int a = in.nextInt();
int b = in.nextInt();
Slove(a,b);
}
int max = 0;
int maxNumber = 0;
for(int i=1;i<=9;i++){
if(count[i]>max){
max = count[i];
maxNumber = i;
}
}
System.out.println(maxNumber);
}
public void Slove(int a,int b){
int[] tempCount = new int[10];
String strb = String.valueOf(b);
for(int i=0;i<strb.length();i++){
int num = strb.charAt(i)-'0';
int result = num * a;
String strResult = String.valueOf(result);
for(int j=0;j<strResult.length();j++){
int number = strResult.charAt(j)-'0';
count[number]++;
tempCount[number]++;
}
}
// 计算a*b
String strResult = String.valueOf(a*b);
for(int j=0;j<strResult.length();j++){
int number = strResult.charAt(j)-'0';
count[number]++;
tempCount[number]++;
}
// 计算a
strResult = String.valueOf(a);
for(int j=0;j<strResult.length();j++){
int number = strResult.charAt(j)-'0';
count[number]++;
tempCount[number]++;
}
// 计算b
strResult = String.valueOf(b);
for(int j=0;j<strResult.length();j++){
int number = strResult.charAt(j)-'0';
count[number]++;
tempCount[number]++;
}
System.out.print(tempCount[1]);
for(int i=2;i<=9;i++){
System.out.print(" "+tempCount[i]);
}
System.out.println();
}
}