我正在麻省理工学院开放式课程中介绍C ++,下面的代码在教授的第一个问题集中作为计算阶乘的基本程序,并提供一些相关问题。
#include <iostream>
using std::cout;
using std::cin;
int main ()
{
short number;
cout << "Enter a number: ";
cin >> number;
cout << "The factorial of " << number << " is ";
int accumulator = 1;
for(; number > 0; accumulator = (accumulator * (number--)));
cout << accumulator << '.\n';
system("pause>nul");
return 0;
}
第一个问题是: “输入以下值时会得到什么:0,1,2,9,10?”
答案部分读作“0:1; 1:1; 2:2; 9:362880; 10:3628800”,但这不是我的情况。 我的程序输出“11768”,每个明显正确的答案,我不知道为什么。
答案集我看到:“0:111768; 1:111768; 2:211768; 9:36288011768; 10:362880011768”
也许代码中有问题,但我没有看到。 我正在使用Visual Studio 2012.也许有人有想法?谢谢你的时间。
答案 0 :(得分:7)
变化:
cout << accumulator << '.\n';
要:
cout << accumulator << ".\n";
编译器正在将多字符文字'.\n'
转换为整数11768
。此行为是实现定义。
答案 1 :(得分:2)
可能应该学习使用endl,否则你会在某些时候被不流畅的流弄糊涂。我知道我有。不是说这是一个没有流动的流问题,但是如果习惯使用endl,OP就不会有这个问题。