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)!