C++ C++;预成型分割函数
我想做一个不带/符号的除法函数C++ C++;预成型分割函数,c++,C++,我想做一个不带/符号的除法函数 long q(int nm1, int nm2) { long q = 0; while ( num1 > num2) { some subtraction here } return q; } 我们的想法是假设输入是有序的,第一个输入除以第二个输入。 这意味着从第一个数中减去第二个数,直到第二个数小于第一个数 我尝试了许多不同的方法来做这件事,但无论出于什么原因,我都打不中 现在我假设这个数字是正数,并且不
long q(int nm1, int nm2)
{
long q = 0;
while ( num1 > num2)
{
some subtraction here
}
return q;
}
我们的想法是假设输入是有序的,第一个输入除以第二个输入。
这意味着从第一个数中减去第二个数,直到第二个数小于第一个数
我尝试了许多不同的方法来做这件事,但无论出于什么原因,我都打不中
现在我假设这个数字是正数,并且不会返回除以零的结果(我可以稍后通过调用我的其他函数来解决这个问题)
这意味着从第一个数中减去第二个数,直到第二个数小于第一个数
那有什么问题
int div(int num, int den)
{
int frac;
for (frac = 0; num >= den; num -= den, frac++)
;
return frac;
}
这意味着从第一个数中减去第二个数,直到第二个数小于第一个数
那有什么问题
int div(int num, int den)
{
int frac;
for (frac = 0; num >= den; num -= den, frac++)
;
return frac;
}
只是稍微改进一下上面的答案。 使用模数
long div(int num, int den)
{
int frac;
int num2 = num;
for (frac = 0; num2 >= den; num2 -= den, frac++)
;
// i needed the original num and den.
return ( (long) frac )+( num % den );
// casts frac to long then adds the modulus remainder of the values.
}
只是稍微改进一下上面的答案。 使用模数
long div(int num, int den)
{
int frac;
int num2 = num;
for (frac = 0; num2 >= den; num2 -= den, frac++)
;
// i needed the original num and den.
return ( (long) frac )+( num % den );
// casts frac to long then adds the modulus remainder of the values.
}
你最初的帖子试图做的是重复减法除法。看看: 最简单的除法算法,历史上并入 《欧几里得元素》一书中提出的最大公约数算法 七、 命题1,找到给定两个正整数的余数 仅使用减法和比较
只需在while循环中添加一个计数器来跟踪迭代次数(这是您想要返回的),循环结束后,N将包含您的余数(当然,如果它不是0)。您最初的帖子试图做的是重复减法除法。看看: 最简单的除法算法,历史上并入 《欧几里得元素》一书中提出的最大公约数算法 七、 命题1,找到给定两个正整数的余数 仅使用减法和比较
只需在while循环中添加一个计数器来跟踪迭代次数(这是您想要返回的),循环结束后,N将包含您的余数(当然,如果它不是0)。只有当num和den是整数值时,此代码才会起作用
int main( int num, int den )
{
if(den==0)
{
return 1;
}
else
{
while(num!=0)
{
num = num - den;
}
}
return 0;
}
只有当num和den是整数值时,此代码才有效
int main( int num, int den )
{
if(den==0)
{
return 1;
}
else
{
while(num!=0)
{
num = num - den;
}
}
return 0;
}
只是一点优化:您不希望输入值具有线性时间复杂度
int div(int num, int den)
{
int result = 0;
int i;
long long x;
long long y;
if (num < 0) return -div(-num, den);
if (den < 0) return -div(num, den);
if (num < den) return 0;
x = num;
y = den;
i = 0;
while((i < 32) && (x > (y << (i+1)))) i++;
for(;i>0; i++)
{
if (x > (y << i))
{
x -= y;
result += 1 << i;
}
}
return result;
}
intdiv(intnum,intden)
{
int结果=0;
int i;
长x;
长y;
if(num<0)返回-div(-num,den);
if(den<0)返回-div(num,den);
如果(num(y0;i++)
{
如果(x>(y)只是一点优化:您不希望输入值具有线性时间复杂度
int div(int num, int den)
{
int result = 0;
int i;
long long x;
long long y;
if (num < 0) return -div(-num, den);
if (den < 0) return -div(num, den);
if (num < den) return 0;
x = num;
y = den;
i = 0;
while((i < 32) && (x > (y << (i+1)))) i++;
for(;i>0; i++)
{
if (x > (y << i))
{
x -= y;
result += 1 << i;
}
}
return result;
}
intdiv(intnum,intden)
{
int结果=0;
int i;
长x;
长y;
if(num<0)返回-div(-num,den);
if(den<0)返回-div(num,den);
如果(num(y0;i++)
{
如果(x>(y)那么,你给我们展示一下你尝试过的“许多不同的方法”中的一种,也许是你认为最接近的方法?这不是真正的编程问题,你只需要知道如何在一张纸上完成,然后将其翻译成代码。exp(log(nm1)-log(nm2))
count?@IcyFlame分数被忽略,就像内置的/
操作符一样。@IcyFlame我不想在这里寻找完美,如果我想要的话,我只想浮动/symbol,你也听说过静态插入语句吗?它们迫使插入流中的任何内容被约束到你想要的任何内容。不管循环到w在那之后我可以添加。我有40个额外的函数来处理各种情况。这一个出于什么原因对我来说都是个问题。那么,你给我们展示一下“许多不同的方法”中的一种怎么样你试过了,也许是你认为最接近的一个?这不是一个真正的编程问题,你只需要知道如何在一张纸上完成它,然后将它翻译成代码。exp(log(nm1)-log(nm2))
count?@IcyFlame分数被忽略,就像内置的/
操作符一样。@IcyFlame我不想在这里寻找完美,如果我想要的话,我只想浮动/symbol,你也听说过静态插入语句吗?它们迫使插入流中的任何内容被约束到你想要的任何内容。不管循环到w在这之后我可以添加。我有40个额外的函数来处理各种情况。这一个无论出于什么原因对我来说都是个问题。在这里你只能得到答案的整数部分,而不是小数部分。你打算如何处理它?你需要处理0和负数的除法,但基本思想是正确的。@icyflam In no-way、 整数除法截断。(在smartassing其他函数之前,先获取一些C的一般意义…)如果你注意到a/3.0给出了一个浮点数作为答案@us2012@icyflame这很容易在输入流中强制使用静态int。我不关心十进制atm。在这里你只会得到答案的整数部分,而不是小数部分。你打算如何处理这个问题?你需要处理0除和负数,但基本思想是是正确的。@icyflame绝对不是。整数除法截断。(在smartassing其他函数之前,先获取一些C的一般含义…)好吧,如果您注意到a/3.0给出了一个浮点数作为答案@us2012@icyflame这很容易在输入流中强制使用静态int。我不关心小数。不。这是(a)错误的,和(b)如果您的任务是在没有/
的情况下执行除法,则%
也将不被允许。否。这是(a)错误的,(b)如果您的任务是在没有/
的情况下执行除法,则%
也将不被允许。