Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;预成型分割函数_C++ - Fatal编程技术网

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)如果您的任务是在没有
/
的情况下执行除法,则
%
也将不被允许。