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));
    }
​
}
​
  • 19
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值