Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.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++_Math_Cyclic - Fatal编程技术网

如何生成循环数的C++

如何生成循环数的C++,c++,math,cyclic,C++,Math,Cyclic,我想要一系列的数字,比如说30-50是循环的。所以如果你做50+1=30,或者49+3=31。在C++中我该怎么做?我相信我会用%运算符来做,但我很难理解它。在执行加法或减法之前,你需要减去30,然后执行运算,然后除以模20,因为50-30=20,最后加30得到你想要的结果。你可以简单地使用%运算符。例如,要计算49+3,可以将其重写为: 30 + 22 % 20. 这将导致32。 我们在这里做的是,简单地取大于30的整数值,然后将其模化20,得到一个范围为30-50的数字,因为当你对一个数字使

我想要一系列的数字,比如说30-50是循环的。所以如果你做50+1=30,或者49+3=31。在C++中我该怎么做?我相信我会用%运算符来做,但我很难理解它。

在执行加法或减法之前,你需要减去30,然后执行运算,然后除以模20,因为50-30=20,最后加30得到你想要的结果。

你可以简单地使用%运算符。例如,要计算49+3,可以将其重写为: 30 + 22 % 20. 这将导致32。
我们在这里做的是,简单地取大于30的整数值,然后将其模化20,得到一个范围为30-50的数字,因为当你对一个数字使用模20时,你将得到一个范围为0-19的值。

你将在环Z/21Z中工作。只需正常进行加法,然后将任何数字映射回规范范围,您可以执行以下操作:

//将环Z/stop start+1Z中的'n'映射为等效值 //开始和停止之间的数字(含) 样板 constexpr T to_ringT n,T start,T stop无异常{ T环尺寸=停止-启动+1; n=环尺寸的n%; 如果n<0,则n=n+环尺寸%环尺寸; //现在0停止n-=环的大小;
assertstart以下是我对这一点的看法。如果您想要一个递归函数来为您执行此操作,您可以通过以下多个步骤将其写出:

#include <iostream>

int next_cyclical_number(int x, int min, int max){
    if( min >= max )
        return -99999;
    if( x < min )
        x = min;

    int mod_value = max - min;

    int offset = min;

    int temp = x - min;

    int remainder = (temp + 1)%mod_value;

    int ret_val = min + remainder;

    return ret_val;
}

int main(int argc, char *argv[])
{
    // show 100 numbers using the function

    int current_number = 0;
    for(int i = 0; i < 100; i++){
        current_number = next_cyclical_number(current_number, 30, 51);
        std::cout << "i: " << i << "\t" << "number: " << current_number << std::endl;
    }

    return 0;
}

你需要它做什么?你需要一个完整的类型和这样的算术,还是只做一些计算,只关心最终的结果?重复从0到20,每个数字加30。是一个选项。对于int i=0;;++i{std::尽管要小心负值,模运算不一定把负数包装成它们的正等价物,显然这是UB所说的。
i: 0    number: 31
i: 1    number: 32
i: 2    number: 33
i: 3    number: 34
i: 4    number: 35
i: 5    number: 36
i: 6    number: 37
i: 7    number: 38
i: 8    number: 39
i: 9    number: 40
i: 10   number: 41
i: 11   number: 42
i: 12   number: 43
i: 13   number: 44
i: 14   number: 45
i: 15   number: 46
i: 16   number: 47
i: 17   number: 48
i: 18   number: 49
i: 19   number: 50
i: 20   number: 30
i: 21   number: 31
i: 22   number: 32
i: 23   number: 33
i: 24   number: 34
i: 25   number: 35
i: 26   number: 36
i: 27   number: 37
i: 28   number: 38
i: 29   number: 39
i: 30   number: 40
i: 31   number: 41
i: 32   number: 42
i: 33   number: 43
i: 34   number: 44
i: 35   number: 45
i: 36   number: 46
i: 37   number: 47
i: 38   number: 48
i: 39   number: 49
i: 40   number: 50
i: 41   number: 30
i: 42   number: 31
i: 43   number: 32
i: 44   number: 33
i: 45   number: 34
i: 46   number: 35
i: 47   number: 36
i: 48   number: 37
i: 49   number: 38
i: 50   number: 39
i: 51   number: 40
i: 52   number: 41
i: 53   number: 42
i: 54   number: 43
i: 55   number: 44
i: 56   number: 45
i: 57   number: 46
i: 58   number: 47
i: 59   number: 48
i: 60   number: 49
i: 61   number: 50
i: 62   number: 30
i: 63   number: 31
i: 64   number: 32
i: 65   number: 33
i: 66   number: 34
i: 67   number: 35
i: 68   number: 36
i: 69   number: 37
i: 70   number: 38
i: 71   number: 39
i: 72   number: 40
i: 73   number: 41
i: 74   number: 42
i: 75   number: 43
i: 76   number: 44
i: 77   number: 45
i: 78   number: 46
i: 79   number: 47
i: 80   number: 48
i: 81   number: 49
i: 82   number: 50
i: 83   number: 30
i: 84   number: 31
i: 85   number: 32
i: 86   number: 33
i: 87   number: 34
i: 88   number: 35
i: 89   number: 36
i: 90   number: 37
i: 91   number: 38
i: 92   number: 39
i: 93   number: 40
i: 94   number: 41
i: 95   number: 42
i: 96   number: 43
i: 97   number: 44
i: 98   number: 45
i: 99   number: 46