如何在不使用這些運算符的情況下用未知數字劃分數字('*', '/', '%')
。分母在運行時給出。在不使用除法運算符的情況下劃分一個數字c
回答
您可以使用此功能
int divide(int nu, int de) {
int temp = 1;
int quotient = 0;
while (de <= nu) {
de <<= 1;
temp <<= 1;
}
//printf("%d %d\n",de,temp,nu);
while (temp > 1) {
de >>= 1;
temp >>= 1;
if (nu >= de) {
nu -= de;
//printf("%d %d\n",quotient,temp);
quotient += temp;
}
}
return quotient;
}
你可以通過一個分子和分母這一功能並獲得所需的商數。
你正在使用'-'操作符... –
@ V-X對不起,但它使用+或 - 運算符很好。我實際上是在不使用'/'和'%'運算符的情況下進行編碼。 – nomorequestions
您還需要檢查參數是否爲負值/正值。 –
整數除法,可以使用div
,ldiv
或lldiv
功能從標準庫:
#include <stdlib.h>
div_t div(int numer, int denom);
ldiv_t ldiv(long int numer, long int denom);
lldiv_t lldiv(long long int numer, long long int denom);
Downvoter,小心解釋你的downvote?調用這些函數是否使用任何禁止的操作符? – ouah
不是downvoter,但問題顯示沒有努力。 – LittleBobbyTables
@LittleBobbyTables是的,我問的是我的答案downvote,而不是OP問題的downvotes。 – ouah
你的問題很模糊, 但我可以給你分了許多與2的特殊情況它可以通過位移操作將數字移到右邊來執行。這是優化強度的一種形式。
例如,1101000二進制(十進制數104),向右移一位,爲0110100(十進制數52):最低位位a 1被移除。類似地,可以通過右移k個位置來執行除以2的任何冪(2 pow k)。因爲位移通常比分割速度快得多。
代碼來測試:
#include <stdio.h>
main()
{
int i = 104;
int k = 3; //
int j = i >> k ; //==> i/2 pow k
printf("j = %d \n",j);
}
這是一個非常簡單的方法的問題;使用循環和基本的[+ - ]運算符。
如果您需要小數的答案,您可以使用times_ten和divide_by_ten函數。在這種情況下,你應該看看atoi()函數; times_ten將提取char數組中的整數,並在將其轉換回整數之前在末尾添加「0」。 divide_by_ten將存儲整數的最後一個字符,將該字符減去'。'。並將存儲的最後一位數字加回數組,然後再將其轉換回整數。 Atoi()會根據我們在char數組中操作的小數來舍入整數。
僅支持整數結果的版本,具有一個額外的函數(leftover_division())替換'%' - 運算符。 [b]傳遞指向divide_rounded()函數的整數而不是常規整數,並在divide_rounded()中調整'a'的值應該使剩餘函數變得冗餘,如果您需要知道,則可節省大量計算時間的lefover。[/ b]
#include <stdio.h>
#include <stdlib.h>
int divide_rounded(int a, int b){
int outcome_rounded = 0;
while(a > b){
a = a - b;
outcome_rounded ++;
}
return outcome_rounded;
}
int leftover_division(int a, int b){
while (a >= b){
a = a - b;
}
return a;//this will return remainder
}
main(){
int number = 20;
int divisor = 3;
int outcome;
int leftover;
outcome = divide_rounded(number, divisor);
leftover = leftover_division(number, divisor);
printf("[%d] divided by [%d] = [%d] + [%d]\n", number, divisor, outcome, leftover);
}
下面方法是二進制除法的同時考慮數也是正的執行。如果減法是一個問題,我們也可以使用二元運算符來實現。
======
-(int)binaryDivide:(int)numerator with:(int)denominator
{
if (numerator ==0 || denominator ==1) {
return numerator;
}
if (denominator ==0) {
#ifdef DEBUG
NSAssert(denominator==0, @"denominator should be greater then 0");
#endif
return INFINITY;
}
// if (numerator <0) {
// numerator = abs(numerator);
// }
int maxBitDenom = [self getMaxBit:denominator];
int maxBitNumerator = [self getMaxBit:numerator];
int msbNumber = [self getMSB:maxBitDenom ofNumber:numerator];
int qoutient = 0;
int subResult = 0;
int remainingBits = maxBitNumerator-maxBitDenom;
if(msbNumber>=denominator){
qoutient |=1;
subResult = msbNumber- denominator;
}
else{
subResult = msbNumber;
}
while(remainingBits>0){
int msbBit = (numerator & (1<<(remainingBits-1)))>0?1:0;
subResult = (subResult <<1) |msbBit;
if(subResult >= denominator){
subResult = subResult-denominator;
qoutient= (qoutient<<1)|1;
}
else{
qoutient = qoutient<<1;
}
remainingBits--;
}
return qoutient;
}
-(int)getMaxBit:(int)inputNumber
{
int maxBit =0;
BOOL isMaxBitSet = NO;
for(int i=0;i<sizeof(inputNumber)*8;i++){
if(inputNumber & (1<<i)){
maxBit = i;
isMaxBitSet=YES;
}
}
if (isMaxBitSet) {
maxBit+=1;
}
return maxBit;
}
-(int)getMSB:(int)bits ofNumber:(int)number
{
int numbeMaxBit = [self getMaxBit:number];
return number>>(numbeMaxBit -bits);
}
void main(){
int a,b,i=0;
clrscr();
printf("Enter the dividend and divisor");
scanf("%d%d",&a,&b);
while(a>=b){
a=a-b;
i++;
}
printf("qoutient is :%d \n remainder : %d",i,a);
getch();
}
儘管代碼本身可以說明問題,但僅有代碼的答案不能提供足夠的信息以被視爲高質量。請添加關於您的代碼爲何解決問題的詳細信息。 –
你可以做到這一點,而不使用循環?在採訪中我被問到了同樣的問題。當我這樣做時,面試官告訴我不要循環做。 –
最簡單的方法:
int divideIntegers(int num, int den){
int sign = (num*den < 0)? -1 : 1;
num = abs(num);
den = abs(den);
int quo = 0;
while((num -= den) >= 0)
quo++;
return sign*quo;
}
n_bits在python
的僞代碼分=輸入的位數超過預計哪個部門是準確的
DEN =除數
prec = int(math.ceil(math.log(den,2)))
shift = n_bits + prec
mult = int(math.ceil((1<<shift)/float(den)))
answer = (x*mult) >> shift
err = sum([round(x/den) - ((x*mult) >> shift) for x in range(1<<n_bits)])
乘法可以用移位來實現的,並增加了
- 1. 如何在不使用除法運算符的情況下劃分兩個數字?
- 2. 在不使用加法運算符的情況下添加兩個數字
- 3. C++:在哪種情況下將使用哪個運算符[]?
- 4. 如何在不使用XOR運算符的情況下切換一位數字?
- 5. 在不使用運算符的情況下添加兩個數字
- 6. 如何在不使用除法運算符的情況下分割兩個整數?
- 7. 如何在不使用操作符'/'的情況下劃分兩個浮點數?
- 8. 如何在不使用位操作的情況下在C中使用+運算符來添加兩個數字
- 9. 在不使用字符串庫的情況下刪除尾隨字符串C
- 10. 如何在不使用strlen的情況下計算字符串的字符數
- 11. 如何在不使用MUL或DIV運算符的情況下將兩個數字在程序集中分開?
- 12. 如何在不使用模數(%)運算符的情況下獲取數字的最後一位數字?
- 13. LIKE運算符未使用多個字的MySQL使用情況
- 14. 在不使用任何算術運算符的情況下添加兩個數字的說明
- 15. 如何在不使用「運算符」一詞的情況下調用模板化的運算符重載?
- 16. 如何在不使用運算符的情況下編寫LessThan方法
- 17. 如何在不使用字符串或整數運算的情況下使用while循環來反轉數字?
- 18. 如何在不帶空格的情況下在一個makefile文件中的行間劃分一個字符串?
- 19. 在不使用LIKE運算符的情況下查找整個值
- 20. 在不使用Java中的新運算符的情況下將字節數組轉換爲字符串
- 21. 全局運算符在哪些情況下隱藏在C++中?
- 22. 如何在不使用strtok的情況下拆分C中的字符串
- 23. 奇怪的情況下,同時使用的sizeof()運算用C
- 24. 在什麼情況下使用typeof運算符很好?
- 25. 如何在不使用除法運算符的情況下編寫實現整數除法算法的函數php
- 26. C#:在沒有使用數組的情況下將字符串(或用戶輸入)拆分爲單個字符?
- 27. 在不使用COM的情況下從C++調用C#方法
- 28. 在不使用庫函數的情況下在C中連接字符串
- 29. 在不使用edidtext的情況下獲取按下的字符
- 30. 在沒有模運算符的情況下測試偶數的數字
浮子或INT?有符號還是無符號?你什麼時候卡住了?爲什麼? –
'n = n >> 1;'.. – Maroun
向我們展示一些代碼並告訴我們您卡在哪裏。這不是「幫助你做家庭作業」網站。 –