还有一个除法运算,只是目前还不是太会,还有一篇博客——<大整数因子>这个运用了一点大整数除法。
加法运算
import java.util.Scanner;
/**
* @author 作者 E-mail: WYJ 1627407425@qq.com
* @version 创建时间:2019年7月31日 上午9:48:13
* 类说明
*/
public class 大整数加法 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String st1 = sc.next();
String st2 = sc.next();
String[] str1 = st1.split(""); //分割第一个大整数
String[] str2 = st2.split(""); //分割第二个大整数
int[] a = new int[201];
int[] b = new int[201];
int[] c = new int[201];
int jw = 0,m=0,n = 0;
for(int i=0;i<str1.length;i++) {
a[a.length-1-i] = Integer.parseInt(str1[str1.length-1-i]);
//将第一个大整数放到数组a里,格式为字符串“123456789”--->00000(数字0多少看情况)123456789
}
for(int i=0;i<str2.length;i++) {
b[b.length-1-i] = Integer.parseInt(str2[str2.length-1-i]); 同理
}
for(int i=a.length-1;i>=0;i--) { //核心部分
c[i] = a[i]+b[i]+jw; //jw表示进位
jw = c[i]/10; //如果该位上的数组大于10就进位
c[i] = c[i]%10; //求余数
}
for(int i=0;i<a.length;i++) { //找到第一个不为零的位置
if(c[i]!=0) {
m = i;
break;
}
if((i==a.length-1)&&c[i]==0) //考虑到如果全是0的情况
n = 1;
}
for(int i=m;i<a.length;i++) //输出
if(n==0)
System.out.print(c[i]);
else if(n==1) {
System.out.println(c[i]);
break;
}
}
}
减法运算
import java.util.Scanner;
/**
* @author 作者 E-mail: WYJ 1627407425@qq.com
* @version 创建时间:2019年7月31日 上午11:02:45
* 类说明
* https://blog.youkuaiyun.com/qq_41578371/article/details/8291836
* 2
*/
public class 大整数减法 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] a = new int[201];
int[] b = new int[201];
int[] c = new int[201];
String st1 = sc.next();
String st2 = sc.next();
String[] str1 = st1.split("");
String[] str2 = st2.split("");
for(int i=0;i<str1.length;i++) {
a[a.length-1-i] = Integer.parseInt(str1[str1.length-1-i]);
}
for(int i=0;i<str2.length;i++) {
b[b.length-1-i] = Integer.parseInt(str2[str2.length-1-i]);
} //前面部分跟上面很相似
for(int i=a.length-1;i>=0;i--) {
if(a[i]<b[i]) { //这里就需要判断相同位数的,能否减动被减数
c[i] = a[i] + 10 -b[i];
a = panduan(i-1,a); //增加一个判断函数,用来判断上一位是否能减动1,并将改动后的数组全部重新赋值给a
}else
c[i] = a[i] - b[i];
}
int s = 0;
for(int i=0;i<c.length;i++) { //输出
if(c[i]!=0) {
s = i;
break;
}
}
for(int i=s;i<a.length;i++)
System.out.print(c[i]);
}
private static int[] panduan(int i,int[] a) {
if(a[i]!=0) { //如果上一位不等于零,相当于大于等于一
a[i] = a[i]-1;
}else { //如果上一位等于零,将上一位改为9,继续往上一位借,同时再次判断,这里运用到了递归
a[i] = 9;
panduan(i-1,a);
}
return a;
}
}
乘法运算
import java.util.Scanner;
/**
* @author 作者 E-mail: WYJ 1627407425@qq.com
* @version 创建时间:2019年8月1日 上午9:28:34
* 类说明 这里我做的提是——计算2的N次方,改变一下就可以求任意的数相乘
*/
public class 计算2的N次方 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] a = new int[400]; //定义一个长度适当的数组
a[0] = 1;
for(int i=0;i<n;i++) { //外循环是循环的次数,也可以运用到求阶乘
int jw = 0;
for(int j=0;j<a.length;j++) { 内循环是循环数组的长度,思路相当于我们平时小学计算乘法的思路,
a[j] = a[j]*2+jw; //依次对个位、十位、百位、、、、相乘再加上上一位的进位
jw = a[j]/10;
a[j] = a[j]%10;
}
}
int s = 0;
for(int i=a.length-1;i>=0;i--) { //判断第一位不为零的位置
if(a[i]!=0) {
s = i;
break;
}
}
for(int i=s;i>=0;i--) 从第一位不为零的地方开始输出
System.out.print(a[i]);
}
}