今日打卡——课堂作业

今日学习内容:主要是上周的作业二,我发的博客没有做到,对大数据的考虑。

长整型也就20几位数左右,但如何运算的数为几十位,甚至100位呢,今天做了一下这个任务

但bug一大堆。还算没有完成。因为整型所表示的数据范围太小所以我考虑用字符串来表示更多位数的数字。但字符串对位数的和差运算并不太方便,所以我选择了字符数组去存储数据,并对相应的位数做进位等运算,但测试并不理想,代码需要更加优化。

代码如下:

import java.util.Scanner;

public class BigInt {
    public static char[] add(char []s1,char []s2){
        char []result = new char[1000];
        int k = 999,d = 0;;
        for(int i = s1.length-1; s1[i]!='\0'; i--)

                if (s1[i] < 48 || s1[i] > 58) {
                    System.out.println("数据有错误");
                    return null;
                }

        for(int j = s2.length-1; s2[j] != '\0';j--){
            if(s2[j]<48||s2[j]>58){
                System.out.println("数据有错误");
                return null;
            }
        }
        for(int i = s1.length-1,j = s2.length-1;s1[i]!='\0'&&s2[j] != '\0';i--,j--){

            int a = Integer.parseInt(String.valueOf(s1[i]));
            int b = Integer.parseInt(String.valueOf(s2[j]));
            int c = a + b +d;
            if(c >= 10){
                String c1 = String.valueOf(c);
                result[k--] = c1.charAt(1);
                d = Integer.parseInt(String.valueOf(c1.charAt(0)));
            }else {
                String c1 = String.valueOf(c);
                result[k--] = c1.charAt(0);
            }
        }

        return result;
    }
    public static char[] input(String s1){
        char[]ch1 = new char[1000];
        for(int i = ch1.length-1,j = s1.length()-1; i >= 0&& j >= 0;i--,j--){
            ch1[i] = s1.charAt(j);
        }
        return ch1;
    }
    public static void main(String[] args) {
        char []ch1 = new char[1000];
        char []ch2 = new char[1000];
        Scanner sc = new Scanner(System.in);
        String s1 = sc.next();
        String s2 = sc.next();
        ch1 = input(s1);
        ch2 = input(s2);
        char[] result = add(ch1,ch2);
        String s3="";
        for(int i = result.length-1;result[i]!='\0';i--)
        {
            s3+=result[i];
        }
        for (int i = 0;i < s3.length(); i++ ){
            System.out.print(s3.charAt(i));
        }

    }

}

明天将继续做接下来的作业。

posted @ 2022-03-18 22:58  几人著眼到青衫  阅读(32)  评论(0)    收藏  举报