日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

程序员面试金典 - 面试题 16.09. 运算(只用+法做乘除)

發布時間:2024/7/5 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 程序员面试金典 - 面试题 16.09. 运算(只用+法做乘除) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 題目

請實現整數數字的乘法、減法和除法運算,運算結果均為整數數字,
程序中只允許使用加法運算符和邏輯運算符,允許程序中出現正負常數,不允許使用位運算。

你的實現應該支持如下操作:

  • 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

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/operations-lcci
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。

2. 解題

參考題解:把乘數和除數的 2n2^n2n 倍的結果 存起來,不斷的加或者減

class Operations { public:Operations() {}int minus(int a, int b) {return a+(-b);}int multiply(int a, int b) {if(a==0 || b==0) return 0;if(a==1) return b;if(b==1) return a;if(a== -1) return -b;if(b== -1) return -a;int negative = 0;if(a < 0) negative += 1, a = -a;if(b < 0) negative += 1, b = -b;if(a > b) swap(a,b);// b*along temp = b;vector<int> b_2, count;int plus = 1;while(temp <= INT_MAX)//b_2數組[b*1,b*2,b*4...]{ b_2.push_back(temp);count.push_back(plus);//b乘以幾得到上面的數temptemp += temp;plus += plus;}int ans = 0;for(int i = b_2.size()-1; i >= 0; i=minus(i,1)){while(a >= count[i]){ans += b_2[i];a = minus(a,count[i]);//把a拆分}}if(negative==1)return -ans;return ans;}int divide(int a, int b) {if(a==0 || b==INT_MAX || b==INT_MIN) return 0;if(b==1) return a;if(b== -1) return -a;int negative = 0;if(a < 0) negative += 1, a = -a;if(b < 0) negative += 1, b = -b;if(a < b) return 0;long temp = b;vector<int> b_2, count;int plus = 1;while(a >= temp){ b_2.push_back(temp);//[b*1,b*2,b*4,...]count.push_back(plus);//b乘以幾得到上面的數temptemp += temp;plus += plus;}int ans = 0;for(int i = b_2.size()-1; i >= 0; i=minus(i,1)){while(a >= b_2[i]){ans += count[i];//商+倍數a = minus(a,b_2[i]);//把a減去b的倍數}}if(negative==1)return -ans;return ans;} };

84 ms 15 MB

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的程序员面试金典 - 面试题 16.09. 运算(只用+法做乘除)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。