C语言:打印非负整数阶乘的函数。

其中N是用户传入的参数,其值不超过1000。如果N是非负整数,则该函数必须在一行中打印出N!的值,否则打印“Invalid input”。
请指出这段代码错在哪一步

#include <stdio.h>
void Print_Factorial ( const int N );
int main()
{
    int N;
    scanf("%d", &N);
    Print_Factorial(N);
    return 0;
}
void Print_Factorial ( const int N )
{
    int i;
    double sum=1.0;
    if(N>0){
        for (i=1; i<N+1; i++) {
            sum=sum*i;
        }
        printf("%.0f",sum);
    }
    else if(N==0)
        printf("1");
    else if (N<0){
        if (N==(int)N) {
            int n=-N;
            for (i=1; i<n+1; i++) {
                sum=sum*i;
            }
            printf("%.0f",sum);
        }
        if(N!=(int)N)
            printf("Invalid input");
    }
}


(错的部分是N<0部分)

n<0就不是非负整数了,应该输出"Invalid input"

#include <stdio.h>
void Print_Factorial ( const int N );
int main() {
    int N;
    scanf("%d", &N);
    Print_Factorial(N);
    return 0;
}
void Print_Factorial ( const int N ) {
    int i,sum=1;
    if(N>=0) {
        for (i=1; i<N+1; i++) {
            sum=sum*i;
        }
        printf("%d",sum);
    } else
        printf("Invalid input");
    
}