// 这是我的代码,用于查找数字的阶乘:
int get_factorial(int num)
{
auto sum = 1;
while(num > 0)
{
sum = sum * num;
num--;
}
return sum;
}
// 这可以给我阶乘,但我的作业要我返回一个字符串。所以如果我的参数是 5,而不是像我的代码那样返回 120,我现在需要它返回一个字符串,上面写着“1x2x3x4x5 = 120”。 “5x4x3x2x1 = 120”也应该有效。
我不确定从哪里开始。我想也许可以创建一个字符串并在循环中附加每个总和,但我不知道该怎么做。
作业对你我这样的初学者来说并不容易。
我可以建议下面的演示程序中显示的以下解决方案。
#include <iostream>
#include <string>
std::string get_factorial( unsigned int n )
{
std::string result;
unsigned long long factorial = 1;
while (n > 1)
{
result += std::to_string( n ) + 'x';
factorial *= n--;
}
return result + std::to_string( n ) + " = " + std::to_string( factorial );
}
int main()
{
for (unsigned int i = 0; i < 10; i++)
{
std::cout << get_factorial( i ) << '\n';
}
}
程序输出为
0 = 1
1 = 1
2x1 = 2
3x2x1 = 6
4x3x2x1 = 24
5x4x3x2x1 = 120
6x5x4x3x2x1 = 720
7x6x5x4x3x2x1 = 5040
8x7x6x5x4x3x2x1 = 40320
9x8x7x6x5x4x3x2x1 = 362880
或者,该功能也可以像该演示程序中那样看起来像以下方式。
#include <iostream>
#include <string>
std::string get_factorial( unsigned int n )
{
std::string result = std::to_string( n == 0 ? 0 : 1 );
unsigned long long factorial = 1;
for ( unsigned int i = 1; i++ < n; )
{
result += 'x' + std::to_string(i);
factorial *= i;
}
return result + " = " + std::to_string( factorial );
}
int main()
{
for (unsigned int i = 0; i < 10; i++)
{
std::cout << get_factorial( i ) << '\n';
}
}
程序输出为
0 = 1
1 = 1
1x2 = 2
1x2x3 = 6
1x2x3x4 = 24
1x2x3x4x5 = 120
1x2x3x4x5x6 = 720
1x2x3x4x5x6x7 = 5040
1x2x3x4x5x6x7x8 = 40320
1x2x3x4x5x6x7x8x9 = 362880
注意类型
unsigned long long int
可以存储n
的阶乘的最大值等于20
.
您不需要 std::to_string(或 std::stringstream)。 您将要使用的数字只有这么多。所以,定义
string digits = "0123456789";
然后用数字[n/10]或数字[n%10]挑出相关的字符。
无论如何,你可能只能达到 factorial(20)。