//n的阶乘和,结果错误 Console.WriteLine("求1!+2!+3!+……+n!,输入n"); int n = int.Parse(Console.ReadLine()); ulong factorial = 1, sum = 0,i=1; while (true) { factorial *= i; sum += factorial; i++; if (i > n) { break; } } Console.WriteLine(sum); Console.ReadLine();
namespace ConsoleApplication11 { class Program { static void Main(string[] args) { Console.WriteLine("求1!+2!+3!+……+n!,输入n"); int n = int.Parse(Console.ReadLine()); ulong factorial=0, sum = 0; for (int i = n ; i > 0 ; i--) { int j=i;factorial=1; while (true) { factorial *= (ulong)j; //sum += factorial; j--; if (j == 0) { break; } } sum += factorial; } Console.WriteLine(factorial); Console.WriteLine(sum); Console.ReadLine(); } } }
n阶的阶乘和如果用while可以这么写ushort n = 10;//假如计算10的阶乘和 ushort curPosition = n;//从第n个开始计算 long fatorial = 0, result = 0;while(curPosition > 0) { fatorial += curPosition--; } //此时已经计算完成n! 然后加入结果中 result += fatorial; curPosition = n - 1;//开始计算前n-1项的阶乘和 while(curPosition > 0) { fatorial /= curPosition; result += fatorial; }
Console.WriteLine("求1!+2!+3!+……+n!,输入n");
int n = int.Parse(Console.ReadLine());
ulong factorial = 1;
while (true)
{
factorial *= n; n--;
if (n == 0)
{
break;
}
}
Console.WriteLine(factorial );
Console.ReadLine();
你用for循环的时候factorial里边装的实际上就是前n-1的阶乘值,所以再乘一个n就可以得到第n项的阶乘。此时再与前n-1项的阶乘和相加就是n项的阶乘和,于是for循环式对的。
如果你改用while,你的方法写错了。不知是不是要我写一写该怎么计算?你可以琢磨下。计算n阶阶乘的时候,while和for应该是怎么计算都不会错的,只是你的for循环中多了一句话
i += 1;//多了这个
去掉后应该就对了。
用while求阶乘和,factorial *= n;这句你的目的应该就是求阶乘,但是这个结果不是阶乘,而仅仅是n而已
用for求阶乘,我不明白for循环里面再加一个i += 1;是什么意思
遇到得不到答案的算法,设个断点,对你关注的变量加监视,就可以找出原因所在
这是不对的,自己再试试!
int n = int.Parse(Console.ReadLine());
ulong factorial = 1;
while (true)
{
factorial *= n; n--;
if (n == 0)
{
break;
}
}
Console.WriteLine(factorial );
Console.ReadLine();
下面的程序结果是n+n*(n-1)+n*(n-1)*(n-2)+..........+n*(n-1)....*2*1
结果是完全不相同的!
//n的阶乘和,结果错误
Console.WriteLine("求1!+2!+3!+……+n!,输入n");
int n = int.Parse(Console.ReadLine());
ulong factorial = 1, sum = 0,i=1;
while (true)
{
factorial *= i;
sum += factorial;
i++;
if (i > n)
{
break;
}
}
Console.WriteLine(sum);
Console.ReadLine();
class Program {
static void Main(string[] args) {
Console.WriteLine("求1!+2!+3!+……+n!,输入n");
int n = int.Parse(Console.ReadLine());
ulong factorial=0, sum = 0;
for (int i = n ; i > 0 ; i--) {
int j=i;factorial=1;
while (true) {
factorial *= (ulong)j;
//sum += factorial;
j--;
if (j == 0) {
break;
}
}
sum += factorial; }
Console.WriteLine(factorial);
Console.WriteLine(sum);
Console.ReadLine();
}
}
}
ushort curPosition = n;//从第n个开始计算
long fatorial = 0, result = 0;while(curPosition > 0)
{
fatorial += curPosition--;
}
//此时已经计算完成n! 然后加入结果中
result += fatorial;
curPosition = n - 1;//开始计算前n-1项的阶乘和
while(curPosition > 0)
{
fatorial /= curPosition;
result += fatorial;
}
while(curPosition > 0)
{
fatorial += curPosition--;
} 很漂亮