我想创建一个应用程序,该应用程序生成满足条件的完整电话号码列表:x
是一个有理数。
我们可以假设
现在,经过一些转换,我们得到
由于telephone number
是整数,而10^9
是整数,我们知道t * 666333999 / s
是整数。因此s
是t * 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>