**
N é o parâmetro passado pelo usuário e seu valor não excede 1000. Se N for um número inteiro não negativo, a função deverá imprimir o valor de N! Em uma linha, caso contrário, imprimirá "Entrada inválida".
**
/*其中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 copy_N=N,digit=0;//copy_N待处理的乘数,digit记录有多少位
int i,n_digit,w;//循环变量;数字的第几位 ;进位
int a[3000];//存储数组
while(copy_N){
a[digit++] = copy_N%10;
copy_N /= 10;
}//将第一个乘数N存入数组,同时获得数组已存储位数
for( i=N-1; i>1; i--){
w = 0;
for(n_digit=0; n_digit<digit; n_digit++){
a[n_digit] *= i;
a[n_digit] += w;//该位数字乘新的乘数,再加上进位w
w = a[n_digit]/10;//进位
a[n_digit] %= 10;//进位之后的更新值
} //新的乘数对之前的乘积从0开始每一位相乘,一次循环更新一位数
while(w){
a[digit++] = w%10;
w /= 10;
}//将此次乘数与每位数字相乘的总进位填充到数组空位,同时digit加1
} //从N-1到2依次做乘法 ,一次循环乘一个数
for( i=digit-1; i>=0; i--){
printf("%d",a[i]);
} //按照高位依次输出存储数组
putchar('\n');
}
—————————————————————————
Esta questão requer uma função para imprimir o fatorial de um número inteiro não negativo.
Definição da interface da função |
---|
void Print_Factorial ( const int N );
N é o parâmetro passado pelo usuário e seu valor não excede 1000. Se N for um número inteiro não negativo, a função deverá imprimir o valor de N! Em uma linha, caso contrário, imprimirá "Entrada inválida".
Exemplo de procedimento de teste do árbitro: |
---|
#include <stdio.h>
void Print_Factorial ( const int N );
int main()
{
int N;
scanf("%d", &N);
Print_Factorial(N);
return 0;
}
/* 你的代码将被嵌在这里 */
-----------------------------------
entrada de amostra:
15
Exemplo de saída:
1307674368000
———————————————————————————————