每日编程一刷(位数过大怎么用数组处理)

本文介绍了如何利用数组处理大数运算的问题,特别是当数据超出常规数据类型范围时,如计算阶乘。通过建立一个足够大的数组,存储每一位数字,并运用进位和取余的原理进行乘法运算。文章提供了伪代码和实际C++代码示例,详细解释了处理大数乘法的步骤,强调了理解进位和取余的重要性。
摘要由CSDN通过智能技术生成

每日编程一刷(位数过大怎么用数组处理)

前言

在这里插入图片描述

欢迎来到每日编程一刷环节 这次带来的是一道数据很大 就是没有正常的数据类型可以储存的一个数据

首先即使是long long类型也不行 因为这个数据类型存储的范围也太小

在这里插入图片描述

大家可以看一下 它们的范围确实也不小 但是 要是算一个100的阶乘 那这些数据根本就不值一提

但是要是定义一个int arr【10000】;的数组来存储 每一位代表我们的数据的每一位 那么 这个岂不是想多大就多大了 所以说是这样的

在这里插入图片描述

这个是100的阶乘…是不是懵逼了直接

img

所以直接进行正题

正题环节

在这里插入图片描述

直接来看一下哈

我们一定要搞清楚就是我们正常操作乘除的时候是如何进位操作处理的 这个是非常重要的一件事情 因为这个关系到我们写这个代码的思路 先看一下

下面是我手写的一个思路图 算是一个伪代码吧
在这里插入图片描述

写的字比较丑 大家见谅哈哈🤞🏼

好了现在进行代码演示

#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;
}

结语

这个题目的思路还是比较清晰的 因为我们对于数据的处理和认知其实还是有待提升的 对于数据过大的时候 要借助 数组这一强大的数据结构帮助我们进行处理问题 注意的就是那个取余和进位的公式 说实话还是蛮重要的都

在这里插入图片描述

数据结构帮助我们进行处理问题 注意的就是那个取余和进位的公式 说实话还是蛮重要的都

好了明天见!!! 拜拜大家

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@white1210

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值