Java中两数值相加的几种方法

直接相加

import java.io.*;

class T {
	public static int sum(int num1, int num2)
	{
		return num1+num2;
	}

	public static void main(String[] args)
	{
		int res = sum(11, 22);
		System.out.println(res);
	}
}

二分查找

import java.io.*;

class T{
	public static int sum(int num1, int num2)
	{
		int l = -200, r = 200;
		while (l < r) {
			int mid = (l + r) >> 1;
			if (mid == num1 + num2) {
				return mid;
			}
			if (mid < num1 + num2)
				l = mid + 1;
			if (mid > num1 + num2)
				r = mid - 1;
		}
		return l;
	}

	public static void main(String[] args)
	{
		int res = sum(11, 22);
		System.out.println(res);
	}
}

位操作

import java.io.*;

class T{
	public static int sum(int num1, int num2)
	{
		if (num2 == 0) return num1;
		return sum(num1 ^ num2, (num1 & num2) << 1);
	}

	public static void main(String[] args)
	{
		int res = sum(11, 22);
		System.out.println(res);
	}
}

蛮力

import java.io.*;

class T{
	public static int sum(int num1, int num2)
	{
		for (int i = -200; i <= 200; i++) {
			if (num1 + num2 == i) {
				return i;
			}
		}
		return -1;
	}
	public static void main(String[] args)
	{
		int res = sum(11, 22);
		System.out.println(res);
	}
}

前缀和

import java.io.*;

class T{
	public static int sum(int num1, int num2)
	{
		int[] A = new int[] {num1, num2};
		int[] prefixSum = new int[A.length+1];
		for (int i = 0; i < A.length; i++) {
			prefixSum[i+1] = prefixSum[i] + A[i];
		}
		return prefixSum[A.length];
	}
	public static void main(String[] args)
	{
		int res = sum(11, 22);
		System.out.println(res);
	}
}

后缀和

import java.io.*;

class T{
	public static int sum(int num1, int num2)
	{
		int[] A = new int[] {num1, num2};
		int[] suffixSum = new int[A.length+2];
		for (int i = A.length; i >= 1; i--) {
			suffixSum[i] = suffixSum[i+1] + A[i-1];
		}
		return suffixSum[1];
	}
	public static void main(String[] args)
	{
		int res = sum(11, 22);
		System.out.println(res);
	}
}

分而治之

import java.io.*;

class T{
	
	int n = 3;
	int[] A = new int[n];
	public int sum(int num1, int num2) {
		A[1] = num1; A[2] = num2;
		return fun(1, 2);
	}
	
	public int fun(int l, int r) {
		if (l==r) return A[l];
		int m = (l+r)>>1;
		return fun(l, m) + fun(m+1, r);
	}
	
	public static void main(String[] args)
	{
		int res = sum(11, 22);
		System.out.println(res);
	}
}

快速幂(平方取幂)

import java.io.*;

class T{
	
	int M = (int) 1e9+7;
	public int sum(int num1, int num2) {
		return pow(num1, 1) + pow(num2, 1);
	}
	public int pow (int x, int exp){
		if (exp==0) return 1;
		int t = pow(x, exp/2);
		t = t*t % M;
		if (exp%2 == 0) return t;
		return t*x % M;
	}
	
	public static void main(String[] args)
	{
		int res = sum(11, 22);
		System.out.println(res);
	}
}

递归

import java.io.*;

class T{
	
	public int sum(int x, int y)
	{
		if (y == 0)
			return x;
		return sum(x ^ y,(x & y) << 1);
	}
	public static void main(String[] args)
	{
		int res = sum(11, 22);
		System.out.println(res);
	}
}

输出
33

© 版权声明
THE END
喜欢就支持一下吧
点赞0打赏 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容