目录
一、不用加减乘除做加法
题目描述:
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
数据范围:两个数都满足 -10<=n<=1000
进阶:空间复杂度 O(1),时间复杂度O(1)
示例
示例1
输入:1,2
输出:3
示例2
输入:0,0
输出:0
题目解析:
本题要求不使用+,-,*,/实现加法,那我们首先想到的就是利用位运算符来实现,首先可以利用^(或)求得没有进位的相加结果,然后利用&(与)运算求得进位的位(需要左移一位),再次相加,直到进位结果为0,求得相加结果。
import java.util.*;
public class Solution {
public int Add(int num1,int num2) {
//没有加进位的和
int add = num1;
//进位
int carry = num2;
//进位
while(carry != 0){
int temp = add ^ carry;
carry = (add & carry) << 1;
add = temp;
}
return add;
}
}
二、三角形
题目描述:
给定三条边,请你判断一下能不能组成一个三角形。
输入描述:
输入包含多组数据,每组数据包含三个正整数a、b、c(1≤a, b, c≤10^100)。
输出描述:
对应每一组数据,如果它们能组成一个三角形,则输出“Yes”;否则,输出“No”。
示例
输入:1 2 3
2 2 2
输出:No
Yes
题目解析:
这道题我们只需要知道组成三角形的限制条件,然后根据这个条件进行判断即可。
组成三角形的条件是:任意两边之和大于第三边;任意两边之差小于第三边。
只要满足条件输出Yes,不满足输出No即可。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()){
double a = scanner.nextDouble();
double b = scanner.nextDouble();
double c = scanner.nextDouble();
isTriangle(a, b, c);
}
}
public static void isTriangle(double a, double b, double c){
if(a + b > c && Math.abs(a - b) < c ||
a + c > b && Math.abs(a - c) < b ||
b + c > a && Math.abs(b - c) < a){
System.out.println("Yes");
return;
}
System.out.println("No");
}
}
如有建议或想法,欢迎一起学习讨论~