import java.util.Scanner; /* 浮点数加法(高精度运算) 思路: 使用字符串,模拟加法运算,来实现高精度浮点数的相加 */ public class Main { public static int carry=0;//进位位 public static void main(String[] args) { Scanner sc=new Scanner(System.in); String str1=sc.nextLine(); String str2=sc.nextLine(); sc.close(); //先分别获取两个字符串的整数部分与小数部分 String integerOfStr1=getInteger(str1); String integerOfStr2=getInteger(str2); String decimalOfStr1=getDecimal(str1); String decimalOfStr2=getDecimal(str2); //随后写两个相加函数,相加函数返回一个String //需注意: // 要先运算小数部分的相加,得到进位信息后,再运算整数部分的相加 // 相加前,要补零对齐 String addDecimal=getAddDecimal(decimalOfStr1,decimalOfStr2); String addInteger=getAddInteger(integerOfStr1,integerOfStr2); //System.out.println(); //对于整数部分,相加后若进位位为1,需要加上一个1 String ans=addInteger+"."+addDecimal; if(1==carry) { ans=carry+ans; } System.out.println(ans); } private static String getAddInteger(String str1, String str2) { //将整数部分对齐 int m=str1.length(); int n=str2.length(); if(m<n) { while(str1.length()<n) { str1="0"+str1; } } if(m>n) { while(str2.length()<m) { str2="0"+str2; } } //从后往前加 String result=add(str1,str2); return result; } private static String getAddDecimal(String str1, String str2) { //先将小数部分对齐 int m=str1.length(); int n=str2.length(); if(m<n) { while(str1.length()<n) { str1+="0"; } } if(m>n) { while(str2.length()<m) { str2+="0"; } } //从后往前加 String result=add(str1,str2); return result; } private static String add(String str1, String str2) { String result=""; for(int i=str1.length()-1;i>=0;i--) { int add=str1.charAt(i)+str2.charAt(i)+carry-2*'0';//例如:字符相加'4'+'1',其整数运算结果为'4'+'1'-'0'-'0' if(add>9) { carry=1; int num=add-10; result=num+result; }else { carry=0; result=add+result; } } return result; } private static String getDecimal(String str) { int point=str.indexOf("."); return str.substring(point+1,str.length()); } private static String getInteger(String str) { int point=str.indexOf("."); return str.substring(0, point); } }