只使用 ++ 操作符实现加减乘除运算

news/2025/2/16 4:56:11/

1. 问题分析

  • 加法操作
    要实现 a+b 的基本思路就是对 a 执行 b++ 操作即可。
  • 减法操作
    要实现 a-b 的基本思路就是不断地对 b 执行 n++ 操作,直到等于 a 为止,记录这个过程中的操作次数。
  • 乘法操作
    要实现 a*b 的基本思路就是对 a 执行 b 次相加就能得到 a*b 的值。
  • 除法操作
    要实现 a/b 的基本思路为:利用之前的乘法操作,对 b 不断乘以 1,2,3,4… n,直到相乘结果 b*n > a 时,就能得到商为 n-1

2. 代码实现

#include <iostream>int add(int a, int b)
{if (a < 0 && b < 0){std::cout << "can not use ++" << std::endl;return -1;}if (a >= 0){for (int i = 0; i < a; i++){b++;}return b;}else{for (int i = 0; i < b; i++){a++;}return a;}
}int sub(int a, int b)
{if (a < b){std::cout << "can not use ++" << std::endl;return -1;}int ret = 0;for (; b < a; b++){ret++;}return ret;
}int multi(int a, int b)
{if (a < 0 || b < 0){std::cout << "can not use ++" << std::endl;return -1;}int ret = 0;for (; b > 0; b--){ret = add(ret, a);}return ret;
}int divi(int a, int b)
{if (a <= 0 || b <= 0){std::cout << "can not use ++" << std::endl;return -1;}int ret = 1;int result = 0;for (;;){result = multi(b, ret);if (result <= a){ret++;}else{break;}}return ret - 1;
}int main()
{std::cout << add(2, -10) << std::endl;std::cout << sub(15, 10) << std::endl;std::cout << multi(15, 10) << std::endl;std::cout << divi(30, 10) << std::endl;return 0;
}

http://www.ppmy.cn/news/603060.html

相关文章

经典排序算法(冒泡排序、选择排序、插入排序)

1. 冒泡排序 1.1 算法步骤 比较相邻的元素。如果第一个比第二个大&#xff0c;就交换他们两个。对每一对相邻元素作同样的工作&#xff0c;从开始第一对到结尾的最后一对。这步做完后&#xff0c;最后的元素会是最大的数。针对所有的元素重复以上的步骤&#xff0c;除了最后一…

Docker 入门系列(8)— 免 sudo 使用 docker 命令、进入未启动的容器

1. 免 sudo 使用 docker 命令 如果还没有 docker group 就添加一个 sudo groupadd docker将用户加入该 group 内 sudo gpasswd -a ${USER} docker重启 docker 服务 sudo service docker restart切换当前会话到新 group 或者重启 X 会话 newgrp - docker注意&#xff1a;最…

RabbitMQ 入门系列(12)— 交换器分类(direct、fanout、topic)

RabbitMQ的 Exchange&#xff08;交换器&#xff09;分为四类&#xff1a; direct&#xff08;默认&#xff09;headersfanouttopic 其中 headers 交换器允许你匹配 AMQP 消息的 header 而非路由键&#xff0c;除此之外 headers 交换器和 direct 交换器完全一致&#xff0c;但…

libavcodec-ffmpeg.so.56 cannot open shared object file

1. 问题现象 ImportError: libavcodec-ffmpeg.so.56: cannot open shared object file: No such file or directory2. 解决方法 sudo apt-get install libavcodec-dev sudo apt-get install libavformat-dev sudo apt-get install libswscale-dev

查找数组中唯一重复的元素和查找数组中丢失的数(哈希法和异或法)

1. 问题 假设数组元素为分别为 1-N&#xff0c;一共 N1 个&#xff0c;其中只有一个元素重复出现&#xff0c;其它元素只出现一个&#xff0c;找出这个重复的元素 2. 思路 2.1 使用 Hash 方法 将出现的元素依次放到一个 hash 表中&#xff0c;每个元素值作为 hash 的 key &am…

查找数组元素最大值和最小值(分治法)

1. 问题 给定一个数组&#xff0c;要求找出数组中的最大值和最小值&#xff0c;假设数组中的值两两各不相同 2. 思路 2.1 首元素比较法 定义变量 max、min &#xff0c; 分别将第一个元素分别赋值给这两个变量&#xff0c;然后依次遍历数组中的全部元素&#xff0c;如果比 ma…

超级实用的思维导图软件

如果你正在寻找一款超级实用的思维导图软件&#xff0c;那么我强烈推荐你使用ProcessOn。这款软件不仅功能强大&#xff0c;而且易于使用&#xff0c;可以帮助你更好地组织和管理工作流程、学习笔记、项目管理等。 首先&#xff0c;让我们来看看ProcessOn的优点。它提供了丰富的…

数组按位置旋转(循环移位)

1. 问题 给定一个数组&#xff0c;按照给定的索引位置旋转&#xff0c;如数组 a [1,2,3,4,5,6,7,8,9]&#xff0c;按照给定索引位置 4 翻转后&#xff0c;输出为 [6,7,8,9,1,2,3,4,5] 2. 思路 2.1 可以直接利用切片索引性质求解 a [1,2,3,4,5,6,7,8,9]&#xff0c;先计算出…