解法:https://blog.csdn.net/code_pang/article/details/8263971
题目类型:分治(大概吧,也不是很确定)
知识点:pow()函数的底层运算机制(因为这道题居然居然可以用一个函数就AC掉!!??),数字位数的确定,数组相乘法(即两个超大整数的相乘,只能用数组存储),二分查找法(节省时间,毕竟题目给的时间只有1秒!)
题目:牛课网上的https://www.nowcoder.com/acm/contest/75#question进击吧!阶乘
解法:
#include <stdio.h> // 数组乘法, res_size: 表示有多少位, 返回结果的位数 int multiply(int x, int res[], int res_size) { int carry = 0; // 进位 for (int i=0; i<res_size; i++) { int prod = res[i] * x + carry; res[i] = prod % 10; carry = prod/10; printf("carry = %d\n",carry); } while (carry!=0) { res[res_size] = carry%10; carry = carry/10; res_size++; } printf("res_size = %d\n",res_size); return res_size; } void factorial(int n) { int res[36000]; // 10000! 位数不超过36000 // 初始化 res[0] = 1; int res_size = 1; // 表示有多少位 // 计算 n! for (int x=2; x<=n; x++) { res_size = multiply(x, res, res_size); } for (int i=res_size-1; i>=0; i--) { printf("%d", res[i]); } printf("\n"); } int main() { long long N; while(scanf("%lld",&N)!=EOF) { factorial(N); } return 0; }
题目知识点:数组乘法
原文地址:https://www.cnblogs.com/myxdashuaige/p/9153152.html
时间: 2024-10-06 00:10:40