大数运算-ASCII和BigInteger和字符

先来看看平常的知识点转换

 String str = "12345";
        String character = "P";
        int i = 54321;
        Integer in = 18631;
        char c = 'Q';
        char[] ch = {'1', '4', '5', '9', '7'};
        BigInteger bigZero = BigInteger.ZERO; 
        
        // 将String转换为int
        int strInt = Integer.valueOf(str).intValue();
        int strInt_2 = Integer.parseInt(str);
 
        // 将String转换为Integer
        Integer integer = Integer.valueOf(str);
        
        // 将Integer转换为String
        String newStr = in.toString();
        
        // 将Integer转换为int
        int fromInteger = in.intValue();
        
        // 将int转换为String
        String num = String.valueOf(i);
        String num_2 = Integer.toString(i);
        String num_3 = "" + i;
        
        // 将int转换为Integer
        Integer integ = new Integer(i);
        
        // 将int转换为BigInteger
        BigInteger big = BigInteger.valueOf(i);
        
        // 将String转换为BigInteger
        BigInteger bigInt = new BigInteger(str);
     
        // 将BigInteger转换为String
        String strZero = bigZero.toString();
        
        // 将String转换为char[]
        char[] strChar = str.toCharArray();
        
        // 将char[]转换为String
        String strCh = new String(ch);
        
        // 将char转换为String
        String cStr = String.valueOf(c); 
        
        // 将String转换为char
        char fromStr = character.charAt(0);

然后看看ASCII码:https://tool.oschina.net/commons?type=4

import java.math.BigInteger;
import java.util.Scanner;

/**
 *
 * 在实际项目中,我们可能会用字符串来表示无法用普通数据类型(int/float)来存储的数值,在这里我们把它们定义为大数。
 * 请实现两个字符串表示的大数相减的程序。例如:1234567890123.1-123456789.1=1234444433334
 * 避免使用各语言内置大数处理库,如 Java.math.BigInteger 等。
 */
public class test {
    private static String solution(String line) {
        /**
         * 该题不能使用内置大数处理库,那么我们可以简单的使用字符数组储存输入字符串,
         * 考虑到位数不一致,我们将字符串倒转相减就可以得到结果
         */
        // please write your code here
        String[] s = line.split("-");
        //错误演示,因为String不可变!!!
        // char s1[] =s.split("-").toString().toCharArray();
        // String str1 = new String(s1[0]);
        char [] a = new StringBuilder(s[0]).reverse().toString().toCharArray();
        char [] b = new StringBuilder(s[1]).reverse().toString().toCharArray();
        int [] minus = new int[a.length];
        for(int i =0;i<a.length;i++){

            int A = a[i]-'0';  // 0的ASCII值=48 其他数字也是依次递增的所以字符运算实际上ASCII值在运算,
                                // 假设a[i]=4则其4即a[i]的ASCII=52 -'0'的ASCII48 = 4
            int B;
            if(i<b.length){

                B=b[i]-'0';
            }else{

                B=0;
            }
            minus[i] = A-B;
        }
        //处理进位
        StringBuilder re = new StringBuilder();
        for (int i =0;i<minus.length;i++){

            if (minus[i]<0){

                minus[i+1]--;
                minus[i]+=10;
            }
            re.append(minus[i]);
        }

        return re.reverse().toString().replaceAll("^(0+)","");
    }

    public static void main(String[] args) {
        char[] arr = {'a','2','3'};
        /**  三种方式
         * char a[]={'1','2','3'};//可以不指定char类型的个数,
         *
         *         char []b={'1','2','3'};
         *
         *         char []c=new char[]{'1','2','3'};
         *
         *         char []d=new char[3];
         *         d[0]='1';
         *         d[1]='2';
         *         d[2]='3';
         *         /*个人觉得如果是java代码开发就写第三种*/

        System.out.println(arr);
        int test =arr[0]-'1';      //详细查看ASCII值 1=49      a=97
        System.out.println(test);
        
        Scanner scanner  = new Scanner(System.in);
        String s = scanner.nextLine();
        //方法一 
        String res = solution(s);
        System.out.println(res);
        
        //方法二
        String[] sArr = s.split("-");
        BigInteger bigInteger1 = new BigInteger(sArr[0]);
        BigInteger bigInteger2 = new BigInteger(sArr[1]);
        System.out.println(bigInteger1.subtract(bigInteger2));
    }

}

 

posted @ 2021-03-28 12:00  To_Yang  阅读(259)  评论(0编辑  收藏  举报