C语言经典例题:求10000以内n的阶乘
求10000以内n的阶乘
一、题目
二、思路
经过测试,用long long类型也无法记录下测试样例中的阶乘,所以我们要借助数组来存储输出样例中的大数,难点在于怎么样存储在数组里呢?
三、如何将大数存储在数组里
首先我们要先弄清楚十进制相乘的过程。
以1666为例:
首先是66得到36,因为是十进制,所以一位的大小要小于十,所以就发生了进位。
第二位的数字为36+3=39,因为是十进制,所以一位的大小要小于十,所以就发生了进位。
所以我们不难看出在运算过程中是先计算完本位与要乘的数相乘,随后在加上一位进位的数,再发生进位
代码的实现
for (int i = 1; i <= n; i++) { for (int j = 0; j < 10000; j++) { arr[j] = arr[j] * i + b; b=arr[j]/10;//要进位的数 arr[j] = arr[j] % 10; } }
整体逻辑的实现
include<stdio.h> #include<string.h> #pragma warning(disable:4996) int main() { int n; scanf("%d", &n); if(n==0) { printf("0"); return 0; } int arr[10000] = { 0 }; arr[0] = 1; int a = n; int b = 0; int c = 0; for (int i = 1; i <= n; i++) { for (int j = 0; j < 10000; j++) { arr[j] = arr[j] * i + b; b=arr[j]/10;//要进位的数 arr[j] = arr[j] % 10; } } int size = 9999; while (arr[size] == 0) { size--; } for (int i = size; i >= 0; i--) { printf("%d", arr[i]); } return 0; }
存在的问题和反思
1.在一开始的时候,数组没有初始化,导致在寻找首数字的时候出错了,以后一定要记得初始化数组
2.记得要考虑特殊情况,(n==0)的时候。
3.一定要缕清楚整个进位的过程和方法。
4.while(arr[size–]==0)是不论判断真假,最后都要size–的。
推荐这些技术文章:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<limits.h>
#include<stdlib.h>//system
#include<string.h>//strcmp
int main()
{
int a = 3;
int b = 5;
...
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
void test(int arr[])
{
int sz = sizeof(arr) / sizeof(arr[0]);
printf("%d\n", sz);
}
int main()
{
int arr[10] = { 0 };
tes...
数组中元素的求和
public class T02 {
public static void main(String[] args) {
int[][]arr=new int[][]{{1,2,3,4,5},{1,2,3,5},{8,9,7}};
int sum=0;
for(int i=0;i< arr.length;i++){
...
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int a = 10;
float f = 10.0;
unsigned char;//0 - 255
signed char;//-128 - 127
return 0;
}
void test(voi...
/********
* 函数名:SelectionSort
* 功能:将无序数组从小到大排序
* 参数:
* @arr:指向数组arr的指针
* @size:数组大小
* 返回值:无
* ******/
void SelectionSort(int *arr,int size)
{
if(arr)
{
for(int i=0;i...
排序
比较
分类
比较排序的时间复杂度的下界O(nlogn)
对于n个待排序元素,在未比较时,可能的正确结果有n!种。在经过一次比较后,其中两个元素的顺序被确定,所以可能的正确结果剩余n!/2种(确定之前两个元素的前后位置的情况是相同,确定之后相当于少了一半的可能性)。依次类推,直到经过m次比较,剩余可能性n!/(2m)种。直到n!/(2m)<=1时,结果只剩余一种。根据斯特灵公式...
第一版
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define N 10
void quick_sort(int arr[], int start, int end);
int partition(int arr[], int ...
https://leetcode.cn/problems/move-zeroes/
提交代码
void moveZeroes(int* nums, int numsSize){
int diff=0;
int arr[numsSize];
for(int i=0;i<numsSize;i++){
if(nums[i]==0){
diff++;
arr[i] = 0;
...
// 选择排序
#include <stdlib.h>
#include <stdio.h>
// 交换两个变量的值。
void swap(int *x,int *y)
{
int itmp=*x;
*x=*y;
*y=itmp;
}
// 采用两层循环实现的方法。
// 参数arr是待排序数组的首地址,len...
这是很基础的教程,我只是写给自己看,作为一个学习笔记记录一下,如果正在阅读的你觉得简单,请不要批评,可以关掉选择离开
如何学好一门编程语言
掌握基础知识,为将来进一步学习打下良好的基础。
上机实践,通过大量的例题学习怎么设计算法,培养解题思路。
养成良好的编码习惯,注释一定要写,要不然保你一周后自己写的代码都不认识了。
存储类定义 C 程序中变量或函数的范围和生命周期。通常放置在他们所修饰...
文章链接:https://www.dianjilingqu.com/3578.html
本文章来源于网络,版权归原作者所有,如果本站文章侵犯了您的权益,请联系我们删除,联系邮箱:saisai#email.cn,感谢支持理解。