- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的程序一直有一个小问题,我想做的是为用户开发一种方法来模拟可能的密码强度。这是假设所有密码都是排列(我知道这很奇怪,但我认为这是为了阻止数据变得更加笨拙。)使用等式......
//n!/(n-r)!当 n! = (e^-n)*(n^n) 平方根 (2(pi)n)。当n为使用的字符数,r为密码长度时
无论我输入什么,我都会收到 nan 作为答案。我认为也许我的方程式不对(也许我以某种方式除以零)所以我重新设计并大大简化了它。但这似乎不是问题所在,尽管我觉得这让我更接近于正确。但我想也许数字溢出在这里有影响?但我真的不知道如何解决这样的问题。我尝试从不同的数据类型跳转,但似乎没有任何效果。
我也有模数问题。它返回的时间小于零的数字,所以根据我的菜鸟知识告诉我,也许我又溢出了但是我还怎么使用 % 而不将它定义为 int?也许解决上述问题会解决这个问题?
如有任何帮助,我将不胜感激。如何处理 nan 的返回值?有没有一步步解决的现状?它几乎总是溢出还是可能是其他原因?
代码本身。
#include <iostream>
#include <cmath>
using namespace std;
const int SECONDS_IN_YEAR = 31556926;
const int SECONDS_IN_DAY = 86400;
const int SECONDS_IN_HOUR = 3600;
const int SECONDS_IN_MIN = 60;
int main()
{
int passwordLength ,characterSymbols;
double instructionsPerSecond, instructionSuccess;
////////////////////////////////////////////////////////////////////////////////
//Equations needed
// n!/(n-r)!
//n is the number of letters in the alphabet
//and r is the number of letters in the password
// n! = (e^-n)*(n^n) sqrt(2(pi)n)
double numeratorFactorial = (pow(M_E,-characterSymbols))
*(pow(characterSymbols,characterSymbols))
*(sqrt(2*M_PI*characterSymbols));
// (n-r)
double characterMinusLength= (characterSymbols-passwordLength);
// (n-r)! = (e^-(n-r)) * ((n-r)^(n-r)) * sqrt(2(pi)(n-r))
double denominatorFactorial = ((pow(M_E, -(characterMinusLength)))*
(pow((characterMinusLength),(characterMinusLength)))
* (sqrt(2*M_PI*(characterMinusLength))));
// n!/(n-r)!
long double passwordPermutation = (numeratorFactorial / denominatorFactorial);
// (passwords)* (instructions/Password) * (seconds/instruction) = sec
int passwordSeconds = (passwordPermutation * instructionSuccess)
*(1/instructionsPerSecond);
int passwordMin = passwordSeconds / SECONDS_IN_MIN ;
int passwordHour = passwordSeconds / SECONDS_IN_HOUR;
int passwordDay = passwordSeconds / SECONDS_IN_DAY ;
int passwordYear = passwordSeconds / SECONDS_IN_YEAR;
////////////////////////////////////////////////////////////////////////////////
//Explain purpose of program
cout << "This program is designed to simulate the strength of passwords." << endl;
//Ask for alphabet
cout << "But first, share with me the max number of characters you'd be using."
<< endl;
cin >> characterSymbols;
//Reflect information
cout << "We will be using " << characterSymbols << " character symbols to "
<< " construct the password.\n" << endl;
///////////////////////////////////////////////////////////////////////////////
//Input length of password
cout << "\n\nWill you give me the length of proposed password?" << endl;
cin >> passwordLength;
//Repeat information
cout << "The password length will be " << passwordLength << "." <<endl;
//cout permutations
cout << "This would lead to " << passwordPermutation << " unique password\n"
<< endl;
////////////////////////////////////////////////////////////////////////////////
//Ask for computer strength
cout << "How powerful is this computer? How many instructions per second " << endl;
cout << "can it accomplish?" << endl;
cin >> instructionsPerSecond;
//Read out computer strength
cout << "The computer can do " << instructionsPerSecond << " instructions/second"
<< endl << endl;
////////////////////////////////////////////////////////////////////////////////
//Ask for instructions/password
cout << "The number of instructions needed to test your password is." << endl
<< endl;
cin >> instructionSuccess;
//reflect
cout << "This computer can do " << instructionSuccess
<< " instructions/password" << endl;
////////////////////////////////////////////////////////////////////////////////
cout << "\n\nThe amount of seconds it'll take to crack this passcode is... "
<< endl << passwordSeconds << " seconds.\n\n\n\n\n" << endl;
////////////////////////////////////////////////////////////////////////////////
//Reflect all information in an easily readable table
cout << "Number of character symbols using... " << characterSymbols << endl;
cout << "Length of password... " << passwordLength << endl;
cout << "Number of permutations... " << passwordPermutation << endl;
cout << "Instructions per second... " << instructionsPerSecond << endl;
cout << "Instructions per password..." << instructionSuccess << endl;
cout << endl << endl << endl;
////////////////////////////////////////////////////////////////////////////////
//Add in conversions for min, hour, day, years
cout << "Number of seconds to break..." << passwordSeconds << endl;
cout << "Converted to minutes..." << passwordMin << endl;
passwordMin = passwordSeconds / SECONDS_IN_MIN;
passwordSeconds = passwordSeconds % SECONDS_IN_MIN;
cout << "Converted to hours..." << passwordHour << endl;
passwordHour = passwordSeconds / SECONDS_IN_HOUR;
passwordSeconds = passwordSeconds % SECONDS_IN_MIN;
cout << "Converted to days..." << passwordDay << endl;
passwordDay = passwordSeconds / SECONDS_IN_DAY;
passwordSeconds = passwordSeconds % SECONDS_IN_DAY;
cout << "Converted to years..." << passwordYear << endl;
passwordYear = passwordSeconds / SECONDS_IN_YEAR;
passwordSeconds = passwordSeconds % SECONDS_IN_YEAR;
return (0);
}
最佳答案
“nan”代表“不是数字”。发生这种情况是因为您声明了变量 characterSymbols 和 passwordLength 而没有给它们初始值。
您必须在使用任何变量之前对其进行初始化 - 如果您不这样做,那么您将有未确定的行为。例如:
int x;
int y;
int z = x + y;
这里无法预测 z 等于什么,因为我们不知道 x 或 y 等于什么。同样,您的代码应该是这样的:
int characterSymbols = 10; //or whatever you want the initial value to be
...
double numeratorFactorial = (pow(M_E,-characterSymbols))
*(pow(characterSymbols,characterSymbols))
*(sqrt(2*M_PI*characterSymbols));
这样,numeratorFactorial 就会有一个有效的值。
关于c++ - 当方程式返回 nan 作为答案时该怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19303847/
我想弄清楚如何将一周内的所有工作时间相加。 “hours”代表一周工作的小时数,“hoursDay”代表一天的工作小时数。唯一的问题是弄清楚如何在它们都由相同的名称表示时将它们全部添加。下面是我的代码
我正在尝试制定一个方程式,根据每 XX 时间的新用户及其推荐用户的输入来确定给定时间的用户数量。 基本上,我们希望每周向系统手动添加 100 个用户。我们假设每个新用户在接下来的每个星期都会再推荐一个
我正在尝试提出一个评级算法 - 所以它会做的是,从用户拥有的一组关键字(用于 SEO)中,为每个关键字提供 1-10 之间的评级(10 是最好的机会来自该集合)- 将通过比较关键字具有的“搜索量”与“
我正在尝试打开队列中的所有弹出窗口,以便它们根据队列数组中的项目数量具有不同的大小和位置。当弹出窗口启动时,想法是它们将完全填满用户屏幕(使用 screen.width 和 screen.height
我已经从一组数据创建了一个 Canvas 饼图,我现在试图定位鼠标相对于饼图的位置,以检测悬停在哪个数据部分。我快到了,但我被一个等式困住了。 我的逻辑运行良好,所以我认为这更像是一道数学题,但我会看
我正在编写一个 python 库来求解各种物理方程,并想为每个方程添加一个方法来显示 LaTeX 格式的方程。我考虑过使用 LaTeX 到 PNG 转换器,然后以某种方式显示与终端内联的图像,这导致我
我的值(value)观是: 0.263 0 0.265 0 0.267 0 0.269 0.0001 0.271 0.0003 0.273 0.0006 0.275 0.0011 0.277 0.00
我的代码在 JavaDoc 注释中通常有很多方程式。我目前正在使用 MathML 来显示这些方程式,因为这是我能够获得可以在 Eclipse 的悬停工具提示中显示的方程式的唯一方法。 我实际上并不关心
是否可以从特定网站导出文本、图像和 LaTeX 方程式,以便您可以直接自定义您自己的 PDF 而不会模糊对象?只有图像具有固定分辨率。 我知道有几种间接生成 PDF 的方法。试图在 Riemann Z
对于我的 C 程序,用户输入“aY + b = c”,其中 a、b 和 c 是 int 值,Y 是“符号常量”。 如何使“aY+b=c”与“aY + b = C”一样有效?基本上,我不确定如何利用 s
我正在根据数据集计算线性回归。我不知道编译时的回归模型或参数数量。 我将回归方程作为字符串存储在 SQL Server 2005 数据库中 y = 3x^2 + 2x // just an examp
我是一名优秀的程序员,十分优秀!