当前位置: 首页 > news >正文

中山外包网站设计如何在百度打广告

中山外包网站设计,如何在百度打广告,进入公众号闪退怎么回事,上海内贸网站建设文章目录 一、题目二、C# 题解 一、题目 请实现整数数字的乘法、减法和除法运算,运算结果均为整数数字,程序中只允许使用加法运算符和逻辑运算符,允许程序中出现正负常数,不允许使用位运算。 你的实现应该支持如下操作&#xff1a…

文章目录

  • 一、题目
  • 二、C# 题解

一、题目

  请实现整数数字的乘法、减法和除法运算,运算结果均为整数数字,程序中只允许使用加法运算符和逻辑运算符,允许程序中出现正负常数,不允许使用位运算。

  你的实现应该支持如下操作:

  • Operations() 构造函数
  • minus(a, b) 减法,返回 a - b
  • multiply(a, b) 乘法,返回 a * b
  • divide(a, b) 除法,返回 a / b

示例:

Operations operations = new Operations();
operations.minus(1, 2); //返回-1
operations.multiply(3, 4); //返回12
operations.divide(5, -2); //返回-2

提示:

  • 你可以假设函数输入一定是有效的,例如不会出现除法分母为0的情况
  • 单个用例的函数调用次数不会超过1000次

  点击此处跳转题目。

二、C# 题解

  使用常数数组 PossNegs 分别记录 2 次幂的正负值,便于后续使用。

P o s s : { 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 } N e g s : { − 2 0 − 2 1 − 2 2 − 2 3 − 2 4 − 2 5 − 2 6 − 2 7 } \begin{array}{l} \hspace{0.15em}Poss:\{\hspace{0.78em} 2^0 \hspace{2.2em} 2^1 \hspace{2.25em} 2^2 \hspace{2.4em} 2^3 \hspace{2.1em} 2^4 \hspace{2.25em} 2^5 \hspace{2.25em} 2^6 \hspace{2.1em} 2^7\} \\ Negs:\{-2^0 \hspace{1em} -2^1 \hspace{1em} -2^2 \hspace{1.2em} -2^3 \hspace{0.9em} -2^4 \hspace{1em} -2^5 \hspace{1em} -2^6 \hspace{0.9em} -2^7\} \\ \end{array} Poss:{2021222324252627}Negs:{2021222324252627}

  • Negative(int a)
      如果 a 是正数,则遍历负数数组 Negs;如果 a 是负数,则遍历正数数组 Poss。每次遍历判断相加后是否溢出,如果不溢出,就相加,否则跳过。
      溢出判断条件:ans + nums[i] + aa 异号,则溢出。

a : 13 ⟵ 方向 n u m s : { − 2 0 ‾ − 2 1 − 2 2 ‾ − 2 3 ‾ − 2 4 − 2 5 − 2 6 − 2 7 } ↑ ↑ ↑ a n s : ( − 1 ) + ( − 4 ) + ( − 8 ) = − 13 \begin{array}{l} \hspace{2em}a:13\\ \hspace{25.9em} \longleftarrow 方向\\ nums:\{\underline{\bold{-2^0}} \hspace{1em} -2^1 \hspace{1em} \underline{\bold{-2^2}} \hspace{1.2em} \underline{\bold{-2^3}} \hspace{0.9em} -2^4 \hspace{1em} -2^5 \hspace{1em} -2^6 \hspace{0.9em} -2^7\} \\ \hspace{4.5em} \uparrow \hspace{5.6em} \uparrow \hspace{2.6em} \uparrow \\ \hspace{0.9em}ans:\hspace{0.3em} (-1) \hspace{1.35em} + \hspace{1.35em} (-4) \hspace{0em} + \hspace{0em} (-8) \hspace{12.5em} = -13\ \end{array} a:13方向nums:{2021222324252627}ans:(1)+(4)+(8)=13 

  • Minus(int a, int b)
      即 a + Negative(b)。

  • Multipy(int a, int b)
      类似 Negative(int a) 的思想,Negative(int a) 可以看做是 Multipy(-1, int a),因此将 nums 数组扩展为 a * 2i 即可求解 a * b。在求解 -b 时(记为 cnt),累加 a * 2i,即可得到答案。
      这里需要注意 a 的符号,如果 b < 0,需要将 a 异号。

a : 5 b : − 13 c n t : ( − 1 ) + ( − 4 ) + ( − 8 ) = − 13 ↓ ↓ ↓ c n t s : { 2 0 ‾ 2 1 2 2 ‾ 2 3 ‾ 2 4 2 5 2 6 2 7 } ⟵ 方向 n u m s : { − 5 ∗ 2 0 ‾ − 5 ∗ 2 1 − 5 ∗ 2 2 ‾ − 5 ∗ 2 3 ‾ − 5 ∗ 2 4 − 5 ∗ 2 5 − 5 ∗ 2 6 − 5 ∗ 2 7 } ↑ ↑ ↑ a n s : ( − 5 ∗ 1 ) + ( − 5 ∗ 4 ) + ( − 5 ∗ 8 ) = − 5 ∗ 13 \begin{array}{l} \hspace{2em}a:5 \hspace{2em} b:-13\\\\ \hspace{1.1em} cnt: \hspace{1.1em} (-1) \hspace{2.9em} + \hspace{2.9em} (-4) \hspace{0.8em} + \hspace{0.8em} (-8) \hspace{19em} = -13\\ \hspace{5.2em} \downarrow \hspace{8.7em} \downarrow \hspace{4.2em} \downarrow \\ \hspace{0.6em} cnts: \{ \hspace{1.2em} \underline{\bold{2^0}} \hspace{3.6em} 2^1 \hspace{3.6em} \underline{\bold{2^2}} \hspace{3.6em} \underline{\bold{2^3}} \hspace{3.6em} 2^4 \hspace{3.6em} 2^5 \hspace{3.6em} 2^6 \hspace{3.6em} 2^7 \hspace{0.9em} \}\\\\ \hspace{38em} \longleftarrow 方向\\\\ nums:\{\underline{\bold{-5*2^0}} \hspace{1em} -5*2^1 \hspace{1em} \underline{\bold{-5*2^2}} \hspace{1.2em} \underline{\bold{-5*2^3}} \hspace{0.9em} -5*2^4 \hspace{1em} -5*2^5 \hspace{1em} -5*2^6 \hspace{0.9em} -5*2^7\} \\ \hspace{5.2em} \uparrow \hspace{8.7em} \uparrow \hspace{4.2em} \uparrow \\ \hspace{0.9em}ans:\hspace{0.3em} (-5*1) \hspace{2.2em} + \hspace{2.2em} (-5*4) \hspace{0em} + \hspace{0em} (-5*8) \hspace{18.5em} = -5*13\\ \end{array} a:5b:13cnt:(1)+(4)+(8)=13cnts:{2021222324252627}方向nums:{520521522523524525526527}ans:(51)+(54)+(58)=513

  • Divide(int a, int b)
      对 b 进行扩展为 nums,即 nums = b * Poss(若 a、b 异号,则 b 取反,目的是使 nums 符号与 a 相同),让 a 尝试依次减去 nums[i],能减则减,减去后 ans 加上对应的 cnts[i](若 a、b 异号,则 cnts 数组为负值;反之,cnts 数组为正值)。是否选取第 i 个元素的条件:
      1. a > 0,则 sum + nums[i] <= a。
      2. a < 0,则 sum + nums[i] >= a。

a : − 67 b : 5 a n s : ( − 1 ) + ( − 4 ) + ( − 8 ) = − 13 ↓ ↓ ↓ c n t s : { − 2 0 ‾ − 2 1 − 2 2 ‾ − 2 3 ‾ − 2 4 − 2 5 − 2 6 − 2 7 } ⟵ 方向 n u m s : { − 5 ∗ 2 0 ‾ − 5 ∗ 2 1 − 5 ∗ 2 2 ‾ − 5 ∗ 2 3 ‾ − 5 ∗ 2 4 − 5 ∗ 2 5 − 5 ∗ 2 6 − 5 ∗ 2 7 } ↑ ↑ ↑ s u m : ( − 65 ) ← ( − 60 ) ← ( − 40 ) = − 5 ∗ 13 \begin{array}{l} \hspace{2em}a:-67 \hspace{2em} b:5\\\\ \hspace{0.9em} ans: \hspace{1.1em} (-1) \hspace{2.9em} + \hspace{2.9em} (-4) \hspace{0.8em} + \hspace{0.8em} (-8) \hspace{19em} = -13\\ \hspace{5.2em} \downarrow \hspace{8.7em} \downarrow \hspace{4.2em} \downarrow \\ \hspace{0.6em} cnts: \{ \hspace{0.8em} \underline{\bold{-2^0}} \hspace{2.6em} -2^1 \hspace{2.6em} \underline{\bold{-2^2}} \hspace{2.6em} \underline{\bold{-2^3}} \hspace{2.6em} -2^4 \hspace{2.5em} -2^5 \hspace{2.4em} -2^6 \hspace{2.4em} -2^7 \hspace{0.4em} \}\\\\ \hspace{38em} \longleftarrow 方向\\\\ nums:\{\underline{\bold{-5*2^0}} \hspace{1em} -5*2^1 \hspace{1em} \underline{\bold{-5*2^2}} \hspace{1.2em} \underline{\bold{-5*2^3}} \hspace{0.9em} -5*2^4 \hspace{1em} -5*2^5 \hspace{1em} -5*2^6 \hspace{0.9em} -5*2^7\} \\ \hspace{5.2em} \uparrow \hspace{8.7em} \uparrow \hspace{4.2em} \uparrow \\ \hspace{0.6em}sum:\hspace{0.9em} (-65) \hspace{2.5em} \leftarrow \hspace{2.5em} (-60) \hspace{0.3em} \leftarrow \hspace{0.3em} (-40) \hspace{18.8em} = -5*13\\ \end{array} a:67b:5ans:(1)+(4)+(8)=13cnts:{2021222324252627}方向nums:{520521522523524525526527}sum:(65)(60)(40)=513

public class Operations {private static long[] Negs, Poss;private const  int    NEG_ONE = -1;private const  int    ARR_LEN = 32;static Operations() {long p = 1, n = -1;Poss = new long[ARR_LEN];Negs = new long[ARR_LEN];for (int i = 0; i < ARR_LEN; i++) { // 初始化正、负数组Poss[i] = p;p += p;Negs[i] = n;n += n;}}public int Minus(int a, int b) {return (int)(a + Negative(b));}public int Multiply(int a, int b) {if (a == 0 || b == 0) return 0;long   p    = b > 0 ? a : Negative(a), ans  = 0, cnt = 0;long[] cnts = b > 0 ? Negs : Poss,     nums = new long[ARR_LEN];for (int i = 0; i < ARR_LEN; i++) { // 初始化记录数组nums[i] = p;p += p;}// 计算 -b 的过程中,同比例计算 ansfor (int i = ARR_LEN + NEG_ONE; i >= 0; i += NEG_ONE) {if (SameSignal(cnt + cnts[i] + b, b)) {cnt += cnts[i];ans += nums[i];}if (cnt + b == 0) return (int)ans;}return (int)ans;}public int Divide(int a, int b) {if (a == 0) return 0;long   p    = SameSignal(a, b) ? b : Negative(b), sum  = 0, ans = 0;long[] cnts = SameSignal(a, b) ? Poss : Negs,     nums = new long[ARR_LEN];for (int i = 0; i < ARR_LEN; i++) { // 初始化记录数组nums[i] = p;p += p;}for (int i = ARR_LEN + NEG_ONE; i >= 0; i += NEG_ONE) {// a > 0,则用 <= 判断溢出,a < 0,则用 >= 判断溢出if (a > 0 && sum + nums[i] <= a || a < 0 && sum + nums[i] >= a) {sum += nums[i];ans += cnts[i];}}return (int)ans;}// 求 -apublic long Negative(long a) {if (a == 0) return 0;long[] nums = a > 0 ? Negs : Poss; // 寻找与 a 异号的数组long   ans  = 0;for (int i = ARR_LEN + NEG_ONE; i >= 0; i += NEG_ONE) { // 绝对值大 -> 小遍历if (SameSignal(ans + nums[i] + a, a))               // ans + nums[i] 未溢出,则加上 nums[i]ans += nums[i];if (ans + a == 0) return ans; // 提前返回}return ans;}// 判断 a、b 符号是否相同// 0 既看作正数也看作负数public bool SameSignal(long a, long b) {return a <= 0 && b <= 0 || a >= 0 && b >= 0;}
}/*** Your Operations object will be instantiated and called as such:* Operations obj = new Operations();* int param_1 = obj.Minus(a,b);* int param_2 = obj.Multiply(a,b);* int param_3 = obj.Divide(a,b);*/
  • 时间:104 ms,击败 80.00% 使用 C# 的用户
  • 内存:48.40 MB,击败 0.00% 使用 C# 的用户
http://www.hkea.cn/news/16465/

相关文章:

  • 阿里云esc建设网站上海网络seo公司
  • 做印刷网站公司百度如何快速收录
  • 如何设置网站布局软文范文
  • h5制作网站开发网络营销方式有哪些?
  • 有限责任公司(自然人独资)惠州seo排名
  • 那个网站的机票做便宜百度竞价推广什么意思
  • 网站建设网站公司的序推广公司产品
  • 四平做网站佳业首页搜索引擎优化方式
  • 网站缺陷和优化的例子色盲测试图动物
  • 温州专业网站建设公司seo快速排名软件案例
  • 政府网站建设需求调查湖北网站设计
  • 网站建设金网推拉新app推广接单平台
  • 西安航空城建设发展集团网站石家庄seo优化公司
  • 上海做网络推广上海seo优化bwyseo
  • 邢台网站建设seo外包公司费用
  • 网站建设与制作课后题答案新泰网站seo
  • 沈阳做网站最好的公司百度公司招聘岗位
  • 上海金融网站建设公司网站模板之家免费下载
  • 财务公司网站建设社群营销的案例
  • html教程菜鸟教程语法系统优化软件哪个最好的
  • 网站建设 业务百度竞价专员
  • wordpress 相册 边框优化大师的优化项目有哪7个
  • 昆明网站搭建网站服务器ip查询
  • 网站建设费用请示网赌怎么推广拉客户
  • 自己做的网站上传百度关键词搜索排名代发
  • 长沙百度网站优化网盘搜索
  • 开封网站建设价格培训班报名
  • 可以做夫妻的游戏视频网站优化营商环境评价
  • mysql网站数据库seo零基础视频教程
  • 简述网站的建设步骤seo网站优化做什么