• 憨批是我


    数组中只有一个数出现了1次 其他数都出现了K次 请输出只出现一次的数  

    java 代码加分析

    /**
     * 
     */
    package com;
    
    
    /**
     * 
     * 信1605-1 HJJ
     * 
     * 数组中只有一个数出现了1次 其他数都出现了K次 请输出只出现一次的数
     * K 个k进制数做不进位加法结果为0 例如 二进制 的1 +1 不进位=0
     * 
     * 因此把数组中的数做不进位加法的最终结果是落单的数
     * 
     * 111    012
     *        012
     *        ----
     *         021
     *         012
     * 0
     * 111
     * -----
     * 
     */
    public class Test4 {
        private static int K=3;//出现的次数
        private static int lengthi=-1;//arrint数组中化简为二进制的最大 位数
        public static void main(String[] args) {
            int arrint[]= {6,6,6,2,2,2,3,4,5,5,5,4,4,600,600,600};//自己构造的数组
            //获取最大位数lengthi
            for (int i = 0; i < arrint.length; i++) {
                if (lengthi<Integer.toString(arrint[i], K).toCharArray().length) {
                    lengthi=Integer.toString(arrint[i], K).toCharArray().length;
                }
                
            }
            System.out.println("当数组转成"+K+"进制后字符串最长长度为"+lengthi);
    
            
            char sum[]=new char[lengthi]; //总的计算结果临时变量
            
            /**
             * 这里需要翻转数组因为加法的时候 一定低位和低位加  当然别的方法也可以只要不加错位就行
             *     new StringBuffer().append(Integer.toString(arrint[i], K).toCharArray()).reverse(); 
                例如 二进制 1100
                               1存放在数组中反过来 1 排在数组第一位 1100 最后那个0也在第一位 这样循环起来方便
             * 
             * 
             * 
             * 
             * */
            
            for (int i = 0; i < arrint.length; i++) {
             StringBuffer  s=new StringBuffer().append(Integer.toString(arrint[i], K).toCharArray()).reverse(); 
              for (int j = 0; j < lengthi; j++) {
                
                  if (j<s.length()) {
                      sum[j]=  intToChar((charToInt(sum[j])+charToInt(s.charAt(j)))%3);
                    
                     
                }
                 
            }
              
                
            }
            
            StringBuffer ss=new StringBuffer().append(sum).reverse();
            
            System.out.println("落单的数为"+Integer.parseInt(ss.toString(), K));
            //Integer.parseInt(ss.toString(), K) 把字符串转成相关进制数  应该只能是无符号(不能出现负数了)数有弊端
            
            
        }
        
        /*
         * char 转int  直接强转数值不对
         *     
         * 
         * */
        public static int  charToInt(char ch) {
            int num=0;
            if (Character.isDigit(ch)){  // 判断是否是数字
                 num = (int)ch - (int)('0');
                return num;
            }
            return num;
            
        }
        /*
         * int 转char  直接强转数值不对 对于ASCII表看看就知道
         *     
         * 
         * */
        public static char  intToChar(int ch) {
            String ss= String.valueOf(ch);
           
            return ss.toCharArray()[0];
        }
        
        
        
    
    }
  • 相关阅读:
    Apache ab压力测试时出现大量的错误原因分析
    图解linux下的top命令
    [转载]几种切词工具的使用(转)
    大规模中文文本处理中的自动切词和标注技术
    [转载]盘点:94版《三国演义》演员的今昔对比照
    搜索引擎切词详解
    iphone-命令行编译之--xcodebuild
    Appium IOS 自动化测试初探
    手把手教你appium_mac上环境搭建
    Appium-doctor 检测Xcode未安装问题
  • 原文地址:https://www.cnblogs.com/xuexidememeda/p/12766829.html
Copyright © 2020-2023  润新知