我想创建一个应用程序,该应用程序生成满足条件的完整电话号码列表:
x是一个有理数。

我们可以假设

现在,经过一些转换,我们得到

由于telephone number是整数,而10^9是整数,我们知道t * 666333999 / s是整数。因此st * 666333999的除数

到目前为止,我的程序搜索666333999的所有除数。我认为它应该做得很好(它应该写出大多数电话号码)。不幸的是,有时我的电话号码(是tym变量)是一个负数。

为什么会这样呢?

这是我的代码。

#include <iostream>
#include <vector>
using namespace std;

int main()
{
    vector < unsigned > divisor;
    const int number = 666333999;
    long double tym;                     // it's the phone number (9 digits)
    for (int i = 2; i < number + 1; i++)
    {                              // I'm pushing all the divisors to vector.
        if (number % i == 0)
        {
        divisor.push_back(i);
        }
    }

    for(unsigned i = 1; i < divisor.size() + 1; i++)
    {                                      // i are consecutives values of s
        for(unsigned j = 1; j < (unsigned)2000000000; j++)
        {                                  // j are consecutives values of t
            tym = number / divisor[i];
            tym *= j;
            if(tym > 99999999 && tym < 2000000000)  // I must substract 10^9
            {
                 cout << "\t(!)\t i = " << i << " and j = " << j << ","
                         "div[i] = " << divisor[i] << ", telephone"
                         " number = " << (tym - 1000000000) << endl;
            }
            else if(tym >= 2000000000)
            {
                break;
            }
        }
    }
}

最佳答案

计算中涉及的数字超出了32位整数的能力,但可能适合64位整数。

可能在您的平台上int是32位。只需使用long long即可。

如果要确定64位,请使用std::int64_t中定义的<cstdint>

10-08 07:56