蓝桥学院2019算法题1.8

解题思路:

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 < len; 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 < len; i++) {
30             //不进位加法
31             for (int j = 0;j<maxlen;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 < maxlen; i++) {
42             res += (resArr[i] % k) * (int) Math.pow(k,i);
43         }
44         System.out.println(res);
45     }
46 }
原文地址:https://www.cnblogs.com/zsh-blogs/p/10381695.html