解题思路:
2个相同的2进制数做不进位加法,结果为0
10相同的10进制数做不进位加法,结果为0
K个相同的K进制数做不进位加法,结果为0
任意进制互换方法:
1、手工取余法
2、Integer.toString(i,radix)
1 package bitOperation;
2
3 /**
4 * @author zsh
5 * @company wlgzs
6 * @create 2019-02-15 8:37
7 * @Describe 题7·出现K次与出现1次
8 * 数组中只有一个数出现了1次,其他的数都出现K次,
9 * 请输出出现1次的数。
10 */
11 public class Main7 {
12 public static void main(String[] args) {
13 int[] arr = {1,1,1,2,2,2,3,4,4,4,5,5,5};
14 int len = arr.length;
15 char[][] kRadix = new char[len][];
16 int k = 3;
17
18 int maxlen = 0;
19 //转成K进制字符数组
20 for (int i = 0; i
21 //求每个数字的3进制字符串并翻转,然后转为字符数组
22 kRadix[i] = new StringBuilder(Integer.toString(arr[i],k)).reverse().toString().toCharArray();
23 if (kRadix[i].length > maxlen){
24 maxlen = kRadix[i].length;
25 }
26 }
27
28 int[] resArr = new int[maxlen];
29 for (int i = 0; i
30 //不进位加法
31 for (int j = 0;j
32 if (j >= kRadix[i].length)
33 resArr[j] += 0;
34 else
35 resArr[j] += (kRadix[i][j] - '0');
36 }
37 }
38
39 int res = 0;
40 //将K进制数还原为10进制数
41 for (int i = 0; i
42 res += (resArr[i] % k) * (int) Math.pow(k,i);
43 }
44 System.out.println(res);
45 }
46 }