每日编程一刷(位数过大怎么用数组处理)
前言
欢迎来到每日编程一刷环节 这次带来的是一道数据很大 就是没有正常的数据类型可以储存的一个数据
首先即使是long long类型也不行 因为这个数据类型存储的范围也太小
大家可以看一下 它们的范围确实也不小 但是 要是算一个100的阶乘 那这些数据根本就不值一提
但是要是定义一个int arr【10000】;的数组来存储 每一位代表我们的数据的每一位 那么 这个岂不是想多大就多大了 所以说是这样的
这个是100的阶乘…是不是懵逼了直接
所以直接进行正题
正题环节
直接来看一下哈
我们一定要搞清楚就是我们正常操作乘除的时候是如何进位操作处理的 这个是非常重要的一件事情 因为这个关系到我们写这个代码的思路 先看一下
下面是我手写的一个思路图 算是一个伪代码吧
写的字比较丑 大家见谅哈哈🤞🏼
好了现在进行代码演示
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
if(n==0)
{
cout<<1;0的阶乘是1
return 0;//直接结束
}
int arr[10000] = { 0 };//对数组进行初始话 不然的话 会出现错误
arr[0] = 1;//对第一个元素进行初始化为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;//乘完之后我们要继续将这个数据进行%10处理
}
}
int size = 9999;//这个是我们定义的下标
while (arr[size] == 0)//只要是0我们就往后找 注意我们放数据的时候是
{
size--;
}
for (int i = size; i >= 0; i--)
{
printf("%d", arr[i]);
}
return 0;
}
结语
这个题目的思路还是比较清晰的 因为我们对于数据的处理和认知其实还是有待提升的 对于数据过大的时候 要借助 数组这一强大的数据结构帮助我们进行处理问题 注意的就是那个取余和进位的公式 说实话还是蛮重要的都
数据结构帮助我们进行处理问题 注意的就是那个取余和进位的公式 说实话还是蛮重要的都
好了明天见!!! 拜拜大家