此题为两个数求和后进行格式化输出,因为没有超出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();
}
}
运行结果如下图