试题 算法训练 P0505

该程序解决了一个数学问题,即对于给定的整数n(0<n<=100),不计算n的阶乘,而是找出n!最右边的非零数字。通过高精度模拟乘法过程,避免了数据溢出,最终输出n!的最后一个非零数字。例如,输入7时,输出结果为4,因为7!的尾部非零数字是4。

试题 算法训练 P0505 链接
 一个整数n的阶乘可以写成n!,它表示从1到n这n个整数的乘积。阶乘的增长速度非常快,例如,13!就已经比较大了,已经无法存放在一个整型变量中;而35!就更大了,它已经无法存放在一个浮点型变量中。因此,当n比较大时,去计算n!是非常困难的。幸运的是,在本题中,我们的任务不是去计算n!,而是去计算n!最右边的那个非0的数字是多少。例如,5!=12345=120,因此5!最右边的那个非0的数字是2。再如,7!=5040,因此7!最右边的那个非0的数字是4。再如,15!= 1307674368000,因此15!最右边的那个非0的数字是8。请编写一个程序,输入一个整数n(0<n<=100),然后输出n!最右边的那个非0的数字是多少。
输入:
  7
输出:
  4

直接模拟n!的求法,由于n<=100,不能使用基本类型,使用高精度模拟,即可得到答案。下面是我的代码。

#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <map>
using namespace std;

int ans[1000][1000];
int main()
{
	ans[1][1]=1;
	for(int i=2;i<=100;i++)
	{
		for(int j=1;j<=500;j++)
			ans[i][j]=ans[i-1][j]*i;
		for(int j=1;j<=500;j++)
			if(ans[i][j]>9){
				ans[i][j+1]+=ans[i][j]/10;
				ans[i][j]%=10;
			}
	}
	int n;cin>>n;
	int len=1;
	while(ans[n][len]==0) len++;
	cout<<ans[n][len]<<'\n';	
    system("pause");
    return 0;
}
这道目是一个编程问,需要实现一个数组求和的函数。具体的函数是void Add(int n, int* a1, int* a2, int* result),其中n是数组长度,a1是第一个数组,a2是第二个数组,result是a1和a2的和。根据目给出的示例,我们可以得出结果result={3, 4, 9, 14}。在main函数中,通过输入n, a1, a2来测试该函数,并输出结果result。具体的代码实现如引用所示。 这道目的算法是比较简单的,主要是通过循环遍历数组,并将对应位置的元素相加得到结果。具体的实现可以参考引用中的代码。 希望能够帮助到你。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [试题 算法训练 P0801](https://blog.youkuaiyun.com/m0_65406049/article/details/129248253)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [试题 算法训练 P0804](https://blog.youkuaiyun.com/weixin_46212625/article/details/123572098)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [试题 算法训练 P0801(python)](https://blog.youkuaiyun.com/2201_75880335/article/details/128739540)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值