Java运用数组运算大整数加减乘

还有一个除法运算,只是目前还不是太会,还有一篇博客——<大整数因子>这个运用了一点大整数除法。

加法运算

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.csdn.net/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]);
	}

}

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值