高精度加法的实现思路
核心代码在于模拟位运算。
1、如何将各个位置对齐?通过将数字反转。
2、计算进位、保留当前位
代码实现如下
import java.util.Scanner; public class 高精度加法 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String a = sc.next(); String b = sc.next(); a = new StringBuffer(a).reverse().toString(); b = new StringBuffer(b).reverse().toString(); String ans = ""; int numJw = 0; for(int i = 0;i<=a.length();i++) { int numAi = i<a.length()?a.charAt(i)-'0':'0'; int numBi = i<b.length()?b.charAt(i)-'0':'0'; int num = numAi + numBi + numJw; numJw = num/10; // 向前的进位数 num = num%10; // 当前位的数字 ans = num + ans; // 各位的扩充 } System.out.println(ans); } }
高精度乘法的实现
其计算采用的方法是按照个位、十位、百位······划分
后模拟进位
// import java.util.Arrays; import java.util.Scanner; public class 高进度乘法 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String a = sc.next(); String b = sc.next(); int[] c = new int[a.length()+b.length()]; a = new StringBuffer(a).reverse().toString(); b = new StringBuffer(b).reverse().toString(); for(int i=0;i<a.length();i++) { int ai = a.charAt(i)-'0'; for(int j = 0;j<b.length();j++) { int bj = b.charAt(j)-'0'; c[i+j] = c[i+j] + ai * bj; } } //System.out.println(Arrays.toString(c)); for(int i = 0;i<c.length-1;i++) { int remind = c[i]%10; int jw = c[i] /10; c[i] = remind; c[i+1] = jw+c[i+1]; } //System.out.println(Arrays.toString(c)); int pos = c.length; while(c[--pos] ==0 && pos>0); while(pos>=0)System.out.print(c[pos--]); } }
这两个属于经典的算法题。
如果读者有疑问,可以私聊,通过视频动态编码的方式理解这两个算法更佳。