zoukankan      html  css  js  c++  java
  • 不使用加减乘除做加法

    问题描述:设计一个算法,不使用加减乘数运算符号实现加法运算。

    分析:这个问题在实际的编程中不会碰到,因为加减乘除是基本的四则运算,其中加法是最根本的运算,因为减法就是加法,只不过是加上加数的相反数而已,

             而乘法,则是将实现了加多次,除法就是减多次,因此只有加法是最核心的运算,可以说计算机只有一种运算就是加法,其他运算是在加法之上定义的

             一个函数操作而已,因此我们总是能够够将所有的操作全部转换为加法操作。

             然而计算机中的运算本质上都是通过位运算实现的,因此这里使用到了位运算。三步即可实现:

            第一步:计算两个数的对应位,但是不计算进步,主要有四种情况,0+0=0,0+1=1,1+0=1,1+1=0,

                       可以看出这正好对应异或操作。

            第二步:计算两个数的进位,只有在1+1的情况下才会有进位,这正好对应与运算,计算完之后,每位上的数正好是后一位的进位,

                       这时把结果左移一位即可。

            第三步:把第一步的结果和第二步的结果相加,查看是否有进位,如果有进位重复第一步和第二步,直到没有进位为止。

           具体的Java代码如下,写法比较通用,读者可以很容易的转化为其他语言实现:

     1 import java.util.*;
     2 public class Main {
     3     public static int sum(int num1,int num2){
     4         int s, c;
     5         do{
     6             s=num1^num2;
     7             c=(num1&num2)<<1;
     8             num1=s;
     9             num2=c;
    10         }while(num2!=0);
    11         return num1;
    12     }
    13     public static void main(String[] args) {
    14         // TODO 自动生成的方法存根
    15         Scanner scan=new Scanner(System.in);
    16         System.out.print("请输入第一个加数:");
    17          int a=scan.nextInt();
    18          System.out.print("请输入第二个加数:");
    19          int b=scan.nextInt();
    20          System.out.println(a+"+"+b+"="+sum(a,b));
    21     }
    22 
    23 }

    输出结果为:

    请输入第一个加数:9
    请输入第二个加数:10
    9+10=19

                  虽然这个题目没有什么实际价值,但是有助于读者深刻理解计算机的内部运算结构,以及位运算的功能,

    读者还是需要掌握这种方法的,在有些问题中可能会起到作用。

  • 相关阅读:
    linux——03-DevOps实战(详版)
    总结跟语言无关的东西
    drf—— RBAC-基于角色的访问控制
    drf—— 全局异常
    122买卖股票的最佳时机
    还记得这门古老的编程语言么,送你一份perl书单!
    程序员学习必备书单汇总,超全!
    书单来了!大厂的技术牛人在读什么:阿里篇
    书单来了!大厂的技术牛人在读什么:华为篇
    书单来了!大厂的技术牛人在读什么:腾讯篇
  • 原文地址:https://www.cnblogs.com/guozhenqiang/p/5483990.html
Copyright © 2011-2022 走看看