此题为两个数求和后进行格式化输出,因为没有超出Integer的表示范围,可以直接整数求和。
思路如下:
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;public class Main { public static void main(String[] args) throws IOException { // TODO Auto-generated method stub BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); String[] strs = str.split(" "); int a = Integer.parseInt(strs[0]); int b = Integer.parseInt(strs[1]); int sum = a+b; if(sum<0){ System.out.PRint("-"); sum=-sum; } //格式化输出 if(sum>=1000000){ System.out.printf("%d,%03d,%03d/n",sum/1000000,(sum/1000)%1000,sum%1000); }else if(sum>=1000){ System.out.printf("%d,%03d/n",sum/1000,sum%1000); }else{ System.out.printf("%d/n",sum); } return; }}如果题目变一下,变为两个大数相加后格式化输出,这时就会超出Integer的表示范围。所以需要转化为字符串相加减。思路如下:import java.io.BufferedReader;import java.io.InputStreamReader;public class Main { public static void main(String[] args) throws Exception { // TODO Auto-generated method stub BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); String[] strs = str.split(" "); String str1 = strs[0]; String str2 = strs[1]; System.out.println(minusBigInteger(str1, str2)); System.out.println(addBigInteger(str1, str2)); } private static String addBigInteger(String str1,String str2){ int i = str1.length()-1; int j = str2.length()-1; int takeOver =0; int sum; String result=""; while(i>=0&&j>=0){ sum = str1.charAt(i)-'0'+str2.charAt(j)-'0'+takeOver; if(sum>9){ sum = sum%10; takeOver =1; }else{ takeOver =0; } result+=(char)(sum+'0'); i--; j--; } while(i>=0){ if(takeOver>0){ sum = str1.charAt(i)-'0'+takeOver; if(sum>9){ sum = sum%10; takeOver =1; }else{ takeOver =0; } result+=(char)(sum+'0'); }else{ result+=new StringBuffer(str1.substring(0, i+1)).reverse(); break; } i--; } while(j>=0){ if(takeOver>0){ sum = str2.charAt(j)-'0'+takeOver; if(sum>9){ sum = sum%10; takeOver =1; }else{ takeOver =0; } result+=(char)(sum+'0'); }else{ result+=new StringBuffer(str2.substring(0, j+1)).reverse(); break; } j--; } if(takeOver>0){ result+=takeOver; } return new StringBuffer(result).reverse().toString(); } private static String minusBigInteger(String str1,String str2){ //始终为str1-str2 int i=str1.length()-1; int j=str2.length()-1; String result =""; int takeOver=0; int sum; while(i>=0&&j>=0){ sum=(str1.charAt(i)-'0')-(str2.charAt(j)-'0')-takeOver; if(sum<0){ sum+=10; takeOver=1; }else{ takeOver=0; } result+=(char)(sum+'0'); i--; j--; } while(i>=0){ if(takeOver>0){ sum=str1.charAt(i)-'0'-takeOver; if(sum<0){ sum+=10; takeOver=1; }else{ takeOver=0; } result+=(char)(sum+'0'); }else{ result+=new StringBuffer(str1.substring(0, i)).reverse(); break; } i--; } int k =result.length()-1; while(result.charAt(k)=='0'){ k--; } result=result.substring(0, k+1); return new StringBuffer(result).reverse().toString(); } }运行结果如下图
新闻热点
疑难解答