所以我正在为Uni制作一个因子重复计划,而且我没有经常使用for循环,
这个想法是你输入一个正数,它会为你做计算, 例如如果选择了数字5,它将执行以下操作:
1 * 2 * 3 * 4 * 5 = 120,它适用于我的大多数输入但是当我通过1时它没有正确
只是想知道是否有人知道我的foor循环有什么问题。
#include <iostream>
using namespace std;
int main() {
int i, n, factorial = 1;
cout<<"Enter a positive integer: ";
cin>>n;
if (n<=0) {
cout << "Please enter a non-negative number!!!\n";
}
else {
for (i = 1; i <=n; ++i) {
factorial *= i; // factorial = factorial * i;
}
cout<< "Factorial of "<<n<<" = "<<factorial;
return 0;
}
}
我也在计划,当数字太大时,它会进入科学记数法,但我需要先让它工作。
当我输入9时,它会正确地进行计算:
1*2*3*4*5*6*7*8*9 = 362880
我打印它的方式是:
Enter a non-negative integer:
9! = 362880
当我输入大于12的数字时,例如13我得到了
Enter a non-negative integer:
13! = 1932053504
答案是错的,我也需要它:
Enter a non-negative integer:
13! = 6.22702e+09
干杯。
答案 0 :(得分:3)
查看此链接以查看每个数据类型范围(类型为int的最小值和最大值): http://www.tutorialspoint.com/cplusplus/cpp_data_types.htm 对于科学记数法,请检查: http://www.cplusplus.com/reference/ios/scientific/ 另请查看此链接以了解溢出的概念: http://www.cplusplus.com/articles/DE18T05o/
答案 1 :(得分:1)
这是因为13的输出值超过insert into list (id) select id from node where uin_title = 'Control'
(4字节)的MAX值并导致整数溢出。
考虑将signed int
更改为int
(8字节)
long long int
答案 2 :(得分:0)
您可以使用long int,您将获得最多20个正确的值!左右。
答案 3 :(得分:0)
#include <iostream>
using namespace std;
// Input validation
int getNumber() {
int n;
do {
cout << "Enter a non-negative number!\n";
cin >> n;
} while (cin && n < 0);
return n;
}
int main() {
int n = getNumber();
unsigned long long factorial = 1; // Maximum possible
for (int i = 1; i <= n; ++i)
factorial *= i;
cout<< n << "! = " << factorial;
return 0;
}
输入
13
输出
13! = 6227020800
请参阅Ideone DEMO。
编辑:如果您需要科学记数法,请使用long double
或流式格式标记,例如std::scientific
。您还可以使用cout.precision method
设置精度。