自学内容网 自学内容网

23年用友提前批笔试真题-大数减法

大数减法

题目描述

以字符串的形式读入两个数字,编写一个函数计算它们的差,以字符串形式返回。

输入描述

输入两个数字(都为正数)

输出描述

两个输入数字的差

输入示例
1 2
输出示例
-1
提示信息

输入的数据可能会超出一般长整数的范围。

思路:

单纯的模拟减法就行,先判断两个数的大小确定最终计算结果的符号,不要忘记去掉最终结果里面的前导0。

笔试为了追求速度也可以直接使用java中的BigDecimal类

import java.lang.*;
import java.util.*;
​
​
​
public class Main {
​
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String num1 = scanner.next();
        String num2 = scanner.next();
        String usedNum1="";
        String usedNum2 = "";
        boolean compareFlag = true;//判断正负
        if(num1.length()>num2.length()){
            compareFlag = true;
            usedNum1 = num1;
            usedNum2 = num2;
        }
        if(num1.length()<num2.length()){
            compareFlag = false;
            usedNum1 = num2;
            usedNum2 = num1;
        }
        if(num1.length() == num2.length()){
            int i;
            for(i = 0;i<num1.length();i++){
                if(num1.charAt(i)>num2.charAt(i)){
                    compareFlag = true;
                    usedNum1 = num1;
                    usedNum2 = num2;
                    break;
                }
                if(num1.charAt(i)<num2.charAt(i)){
                    compareFlag = false;
                    usedNum1 = num2;
                    usedNum2 = num1;
                    break;
                }
            }
            if(i == num1.length()){
                System.out.println(0);
                return;
            }
        }
        StringBuilder sb = new StringBuilder();
        Boolean needGet = false;//需要借位
        for(int i =0;i<usedNum2.length();i++){
            char c1 = usedNum1.charAt(usedNum1.length()-1-i);
            char c2 = usedNum2.charAt(usedNum2.length()-1-i);
            int num = c1-c2;
            if(needGet){
                num-=1;
                needGet = false;
            }
            if(num<0){
                num+=10;
                needGet = true;
            }
            sb.append(num);
        }
        for(int i = usedNum2.length();i<usedNum1.length();i++){
            int num = usedNum1.charAt(usedNum1.length()-1-i)-'0';
            if(needGet){
                num-=1;
                needGet = false;
            }
            if(num<0){
                num+=10;
                needGet = true;
            }
            sb.append(num);
        }
        String tmpStr = sb.reverse().toString();
        int i;
        for(i = 0;i<tmpStr.length();i++){
            if(tmpStr.charAt(i)!='0'){
                break;
            }
        }
        System.out.println(compareFlag?tmpStr.substring(i):'-'+tmpStr.substring(i));
    }
​
}
​

原文地址:https://blog.csdn.net/m0_62074940/article/details/140724234

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!