写一个方法,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。

思路:

1.两个数异或:相当于每一位相加,而不考虑进位;
2.两个数相与,并左移一位:相当于求得进位;
3.将上述两步的结果相加;

参考代码:

public static int Add(int num1,int num2) {
        while (num2!=0) {
            int temp = num1^num2;//异或相当于加,但不考虑进位
            num2 = (num1&num2)<<1;//按位与再左移一位用来计算进位
            num1 = temp;
        }
        return num1;
    }
        //递归版本
    public static int Add2(int num1,int num2) {
        if(num2==0){
            return num1;
        }else{
            return Add(num1^num2,(num1&num2)<<1);
        }
    }

原文地址:https://blog.51cto.com/14233363/2406293

时间: 2024-10-28 08:32:02

写一个方法,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。的相关文章

给定一个正整数,实现一个方法求出离该整数最近的大于自身的 换位数 &lt;把一个整数各个数位进行全排列&gt;

"""给定一个正整数,实现一个方法求出离该整数最近的大于自身的 换位数 -> 把一个整数各个数位进行全排列""" # 使用 permutations() 方法实现import itertools def full_arrangement(num): my_str = '' my_list = [] permutation = list(itertools.permutations(str(num), len(str(num)))) for

【c语言】求两个整数之和

// <img src="http://img.blog.csdn.net/20150423113342974?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhb3lhcWlhbjU1Mg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /> #include <stdio.h>

不用【加减乘除】求两个整数之和

首先我们可以分析人们是如何做十进制的加法的,比如是如何得出5+17=22这个结果的.实际上,我们可以分成三步进行: 只做各位相加不进位,此时相加的结果是12(个位数5和7相加不要进位是2,十位数0和1相加结果是1): 做进位,5+7中有进位,进位的值是10;第三步把前面两个结果加起来,12+10的结果是22,刚好5+17=22. 我们一直在想,求两数之和四则运算都不能用,那还能用什么?对数字做运算,除了四则运算之外,也就只剩下位运算了.位运算是针对二进制的,我们就以二进制再来分析一下前面的三步走

写一个方法求数组中的最大值,最小值,总和以及平均值。

class Program { /// <summary> /// 求数组中的最大值,最小值,总和以及平均值. /// </summary> /// <param name="nums">输入一个数组</param> /// <returns>返回一个新的数组(max,min,sum,avg)</returns> public static int[] GetMaxMinSumAvg(int[] nums) { i

07-C程序求两个整数之和

#include<stdio.h>   //这是编译预处理指令 int main()                //定义主函数 {                            //函数开始 int a,b,sum;       //定义a,b,sum为整型变量 a=8;                 //对a进行赋值 b=5; sum=a+b; printf("sum=%d\n",sum);   //输出结果 return 0;               

写一个方法,输入两个正整数,输出在两个正整数范围内即被3整除,又被7整除的正整数

import java.util.Scanner;/* * @写一个方法,输入两个正整数,输出在两个正整数范围内即被3整除,又被7整除的正整数. * */public class Test5 { static Boolean boo=false; public static void main(String[] args) { Scanner scanner = new Scanner(System.in); long scan = scanner.nextLong(); long scan1

求两个整数的最大公约数

<C和指针>第7章第2道编程题: 两个整型值M和N(M.N均大于0)的最大公约数可以按照下面的方法计算: 请编写一个名叫gcd的函数,它接受两个整型参数,并返回这两个数的最大公约数.如果这两个参数中的任何一个不大于零,函数返回零. 1 /* 2 ** 求两个整数的最大公约数 3 */ 4 5 #include <stdio.h> 6 7 int gcd( int M, int N ); 8 9 int 10 main() 11 { 12 int m, n; 13 scanf( &q

写一个方法void sanjiao(int a,int b,int c),判断三个参数是否能构成一个三角形,、。。。。。

.写一个方法void sanjiao(int a,int b,int c),判断三个参数是否能构成一个三角形, 如果不能则抛出异常IllegalArgumentException,显示异常信息"a,b,c不能构成三 角形",如果可以构成则显示三角形三个边长,在主方法中得到命令行输入的三个 整数,调用此方法,并捕获异常. 代码: package exception; import java.util.Scanner; public class SanJiao { public stati

异常处理:写一个方法void triangle(inta,intb,int c),判断三个参数是否能构成一个三角形。

写一个方法void triangle(inta,intb,int c),判断三个参数是否能构成一个三角形.如果不能则抛出异常IllegalArgumentException,显示异常信息:a,b,c "不能构成三角形":如果可以构成则显示三角形三个边长.在主方法中得到命令行输入的三个整数,调用此方法,并捕获异常. import java.util.Arrays;import java.util.Scanner; public class ExceptionTest1 { public