/*为什么输入的n超过20之后就出现了负数,甚至还有0的出现?望解答*/ #include<stdi

/*为什么输入的n超过20之后就出现了负数,甚至还有0的出现?望解答*/ #include int sum(int n) { long long unsigned int b; if(n==1||n==0) {b=1;} else {b=n*sum(n-1);} return b; } main() { int n; while(1) { printf("\n请输入N的值:"); scanf("%d",&n); printf("\nN!=%d\n",sum(n)); } }/*这是用递归方式求N!*/

b是long long unsigned int

函数sum返回值又是int

输出又是整型%d....

都溢出了

#include<stdio.h>
long long unsigned int sum(int n)
{
	long long unsigned int b;
	if (n == 1 || n == 0)
	{
		b = 1;
	}
	else {
		b = n * sum(n - 1);
	}
	return b;
}

int main()
{
	int n;
	while (1)
	{
		printf("\n请输入N的值:");
		scanf_s("%d", &n);
		printf("\nN! = %lld\n ", sum(n));
	}
}