- 任意两个正整数相加,需要考虑到是否越界的问题
即使两个用long或者更大数据类型,但还是不能保证不越界,所以可以考虑将两数转化为字符串再去处理,结果同样以字符串输出
import java.util.Scanner;
public class MyInt {
String str; //字符串常量
static Scanner s; //输入流
//构造方法1
public MyInt() {
p("请输入你所想创建的任意长度的正整数...");
String str = s.nextLine();
if(!check(str))
str = null;
else {
this.str = str;
}
}
//重载的构造方法
public MyInt(String str) {
this.str = str;
}
//主函数
public static void main(String[] args) {
s = new Scanner(System.in);
MyInt mi = new MyInt();
if(mi.str == null) {
p("创建失败...");
return;
}
MyInt m2 = new MyInt();
if(m2.str != null) {
p("相加得到的结果是:");
p(mi.add(m2));
} else
p("请输入正确的数字");
s.close();
}
//两个数相加的方法
public MyInt add(MyInt myInt) {
String f = ""; //先对f这个最终结果赋值
int flag = 0; //用于计算进位的变量,只取0,1
return new MyInt(count(this.str, myInt.str, f, flag));
}
//递归调用的两个数相加具体过程操作
public String count(String s1, String s2, String f, int flag) {
int a, b;
if((s1.length() == 0) && (s2.length() == 0)) { //当来给你个字符串都是空的情况
if(flag == 1)
f = f + Integer.toString(1); //若flag为1,则代表有进位,那么需加上1
return new StringBuilder(f).reverse().toString(); //最终需要将整个字符串反转
}
else if((s1.length() == 0) && (s2.length() != 0)) { //当第一个字符串空,而第二个不是空的情况
a = 0;
b = Character.getNumericValue(s2.charAt(s2.length()-1)); //取出第二个字符串最后一位
s2 = s2.substring(0, s2.length()-1); //然后将第二个字符串截除最后一位
} else if((s1.length() != 0) && (s2.length() == 0)) { //当第二个字符串空,而第一个不是空的情况
a = Character.getNumericValue(s1.charAt(s1.length()-1)); //同上
b = 0;
s1 = s1.substring(0, s1.length()-1); //同上
} else {
a = Character.getNumericValue(s1.charAt(s1.length()-1));
b = Character.getNumericValue(s2.charAt(s2.length()-1));
s1 = s1.substring(0, s1.length()-1);
s2 = s2.substring(0, s2.length()-1);
}
int temp = a + b + flag; //末尾相加
if(temp < 10) { //如果结果小于10
f = f + Integer.toString(temp); //将结果直接接在f字符串最后
flag = 0; //进位变量置为0
} else {
f = f + Integer.toString(temp % 10); //将结果的个位放到字符串最后
flag = 1; //进位置为1
}
f = count(s1, s2, f, flag); //递归调用函数本身
return f;
}
//重写了toString方法
public String toString() {
return str;
}
//自己写的一个打印方法
static void p(Object o) {
System.out.println(o);
}
//用来检查输入的字符串是否是正整数
static boolean check(String s) {
boolean b = true;
for(int i=0; i<s.length(); i++) {
if(!Character.isDigit(s.charAt(i))) { //只是简单判断下每一位是否都是0~9的数字
b = false;
break;
}
}
return b;
}
}
以下是结果描述: