Time Limit: 10 second

Memory Limit: 2 MB

问题描述

已知正整数n(n≤100),设s=1!+2!+3!+...+n!。其中“!”表示阶层,即n!=1*2*3*...*(n-1)*n,如:3!=1*2*3=6。请编程实现:输入正整数n,输出计算结果s的值。

Input

文件输入仅一行,输入n

Output

s的值。

Sample Input

4

Sample Output

33

【题解】

先处理阶乘,这个是高精度乘单精度,然后在一边处理阶乘的时候,一边加起来,即高精度加法。

【代码】

#include <cstdio>

int n,a[300],b[300],la = 1 ,lb = 1; //a数组用于存储阶乘,b数组用于存储当前的阶乘和。

void input_data()
{
scanf("%d",&n);
for (int i = 1;i <= 299;i++) //初始化所有的数字为0
a[i] = 0,b[i] = 0;
a[1] = 1; //0!== 1
} void get_ans()
{
for (int i = 1;i <= n;i++) //开始获取前n个阶乘的和。
{
int x = 0;
for (int j = 1;j <= la;j++) // 乘上i,同时一边处理进位
{
a[j] = a[j] * i + x;
x = a[j] / 10;
a[j] = a[j] % 10;
}
while (x > 0) //如果这个数的位数还可以变大 就用while让其变大。
{
la++;
a[la] += x;
x = a[la] / 10;
a[la] = a[la] % 10;
}
x = 0;//接下来处理加法
int l;
if (la > lb) //先判断哪一个数比较大,获取他的长度 用于做加法
l = la;
else
l = lb;
for (int j = 1;j <= l;j++) //开始加上去 一边处理进位
{
b[j] = b[j] + a[j] + x;
x = b[j] / 10;
b[j] = b[j] % 10;
}
while (x > 0) //如果可以增加长度则增加长度
{
l++;
b[l] += x;
x = b[l] / 10;
b[l] = b[l] % 10;
}
lb = l; //更新b数组的长度
}
} void output_ans() //最后b数组逆序输出即可。
{
for (int i = lb;i >= 1;i--)
printf("%d",b[i]);
} int main()
{
//freopen("F:\\rush.txt","r",stdin);
input_data();
get_ans();
output_ans();
return 0;
}

【9104】&&【a103】阶乘和的更多相关文章

  1. C语言 · 阶乘计算 · 基础练习

    问题描述 输入一个正整数n,输出n!的值. 其中n!=1*2*3*-*n. 算法描述 n!可能很大,而计算机能表示的整数范围有限,需要使用高精度计算的方法.使用一个数组A来表示一个大整数a,A[0]表 ...

  2. Java 计算N阶乘末尾0的个数-LeetCode 172 Factorial Trailing Zeroes

    题目 Given an integer n, return the number of trailing zeroes in n!. Note: Your solution should be in ...

  3. 关于for循环的几个小练习,例如奇数偶数,阶乘,求和等

    1 .100以内的奇数和偶数 var js = ""; var os = ""; for(var i=1;i<101;i++) { if(i%2 == 0 ...

  4. [LeetCode] Factorial Trailing Zeroes 求阶乘末尾零的个数

    Given an integer n, return the number of trailing zeroes in n!. Note: Your solution should be in log ...

  5. 求单链表L各结点的阶乘之和(c语言)

    链表需要用到指针 阶乘需要用到递归 链表中的注意事项: 1.链表L是否等于NULL ----------是循环结束的条件 2.链表L->Data ---------取链表L中各个结点的值 3.L ...

  6. 洛谷 P2726 阶乘 Factorials Label:Water

    题目背景 N的阶乘写作N!,表示小于等于N的所有正整数的乘积. 题目描述 阶乘会变大得很快,如13!就必须用32位整数类型来存储,到了70!即使用浮点数也存不下了. 你的任务是找到阶乘最前面的非零位. ...

  7. js实现阶乘

    //while循环实现function calNum(n) { var product = 1; while(n > 1){//1*5*4*3*2,1*n*(n-1)*(n-2)*...*2 p ...

  8. 洛谷P1134 阶乘问题[数论]

    题目描述 也许你早就知道阶乘的含义,N阶乘是由1到N相乘而产生,如: 12! = 1 x 2 x 3 x 4 x 5 x 6 x 7 x 8 x 9 x 10 x 11 x 12 = 479,001, ...

  9. Random随机类(11选5彩票)BigInteger大数据类(华为面试题1000的阶乘)

    先上Java Web图 为了简化叙述,只写Java代码,然后控制台输出 使用[Random类]取得随机数 import java.util.Random; public class Fir { pub ...

随机推荐

  1. 海胜专访--MaxCompute 与大数据查询引擎的技术和故事

    摘要:在2019大数据技术公开课第一季<技术人生专访>中,阿里巴巴云计算平台高级技术专家苑海胜为大家分享了<MaxCompute 与大数据查询引擎的技术和故事>,主要介绍了Ma ...

  2. Sentinel 1.5.0 正式发布,引入 Reactive 支持

    近日,流控降级组件 Sentinel 的又一个里程碑版本 1.5.0 正式发布. 该版本引入 Reactive 的支持,并提供多项新特性与改进.从 1.5.0 版本开始,Sentinel 仅支持 JD ...

  3. 使用split_size优化的ODPS SQL的场景

    使用split_size优化的ODPS SQL的场景 首先有两个大背景需要说明如下:说明1:split_size,设定一个map的最大数据输入量,单位M,默认256M.用户可以通过控制这个变量,从而达 ...

  4. ajax嵌套陷阱

    ajax嵌套陷阱 $('.ajaxupd').click(function () { $('.shadow1').show(); $('.update').show(); var tds=$(this ...

  5. ORACLE 日常维护命令手册

    1查看数据库版本SELECT * FROM V$VERSION; 2查看数据库语言环境SELECT USERENV('LANGUAGE') FROM DUAL; 3查看ORACLE实例状态SELECT ...

  6. 2019-7-4-win10-uwp-处理用户点击关闭按钮

    title author date CreateTime categories win10 uwp 处理用户点击关闭按钮 lindexi 2019-07-04 09:28:57 +0800 2019- ...

  7. SQL if语句简要

    if语句 可以作为表达式用 可以在存储过程中作为流程控制语句用 表达式 IF(条件,条件true,条件false) 示例 sex字段m,f 互换 update salary set sex = if( ...

  8. Google 各国地址

    google各国域名大全 香港www.google.com.hk 台湾www.google.com.tw 日本www.google.co.jp 中国www.google.cn 韩国www.google ...

  9. Android内核剖析读书笔记(1)—Framework概述

    一.Framework组成 1.服务端组成 a.WindowManagerService     决定各窗口的叠放次序.隐藏或者显示窗口 b.ActivityManagerService   管理应用 ...

  10. python 操作asdl

    #!/usr/bin/env python# -*- coding:utf-8 -*- import win32ras import time,os def Connect(dialname, acc ...