题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3123

预备知识点:

(a+b)%m=[(a%m)+(b%m)]%m
(a*b)%m=[(a%m)*(b%m)]%m
所以(0!+1!+2!+.....+n!)%m=[(0!%m+1!%m)%m+(1!%m)*(2%m)%m}%m.........到K>=n时,K!%m=0

因为此题涉及大数据,因此去了解了一下C/C++语言中计算int,float,double,char四种数据类型所能表示的数据范围:

详见博客:https://blog.csdn.net/wordwarwordwar/article/details/52558687

题目描述:

此题关键点在n的数据范围为0~10^100,所以我用了两种方法来处理此大数据:

1、利用char数组来存大数n,实现大数相加

#include<stdio.h>
#include<iostream>
#include<cstring>
using namespace std;
char a[];
int main()
{
int t;
long long m,ans;
scanf("%d",&t);
while(t--)
{
ans=;
scanf("%s",a);
scanf("%lld",&m);
long long sum=;
int len=strlen(a);
for(int i=;i<len;i++)
{
sum=sum*+(a[i]-'');
if(sum>m)
break;
}
if(sum>=m)
{
ans=m-;
for(int i=ans-;i>=;i--)
{
ans=(((ans+)%m)*i%m)%m;
}
}
else
{
ans=sum;
for(int i=ans-;i>=;i--)
ans=(((ans+)%m)*i%m)%m;
}
printf("%lld\n",(ans+)%m);
}
return ;
}

2、因为double型能表示的数据范围在1.7 x 10^(-308)~ 1.7 x 10^(+308)之间,而n的范围为0~10^100,所以可以利用double型来存大数n。

 #include<stdio.h>
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
int t;
double a;
long long m,ans;
scanf("%d",&t);
while(t--)
{
ans=;
scanf("%lf%lld",&a,&m);
if(a>=m)
{
ans=m-;
for(int i=ans-;i>=;i--)
{
ans=(((ans+)%m)*i%m)%m;
}
}
else
{
ans=a;
for(int i=ans-;i>=;i--)
ans=(((ans+)%m)*i%m)%m;
}
printf("%lld\n",(ans+)%m);
}
return ;
}

模运算(附加几种数据类型的数据范围判断)-hdu3123的更多相关文章

  1. redis 几种数据类型往数据库存数据和取数据的帮助类

    package com.fndsoft.bcis.utils; import org.springframework.beans.factory.annotation.Autowired; impor ...

  2. poj 3980 取模运算

    取模运算 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10931   Accepted: 6618 Description ...

  3. pyhton学习笔记(基础五:数据类型、数据运算)

    数据类型初识 1. 数字 整数:2是一个整数的例子 长整数 不过是大一些的整数 3.23和52.3E-4是浮点数的例子.E标记表示10的幂.在这里,52.3E-4表示52.3*10-4. (-5+4j ...

  4. mysql中的优化, 简单的说了一下垂直分表, 水平分表(有几种模运算),读写分离.

    一.mysql中的优化 where语句的优化 1.尽量避免在 where 子句中对字段进行表达式操作select id from uinfo_jifen where jifen/60 > 100 ...

  5. python数据类型和数据运算

    数字 整型 包括正整数和负整数,和数学的表示方法一样.如:1.100.8008.-12等. 浮点型 浮点数字也称为小数,如果按照科学计数法表示时,小数点的位置是可变的.如:1.23x109==12.3 ...

  6. 使geoJSONLayer能够加载两种数据类型的geojson数据

    问题描述 在使用geoJSONLayer加载geojson数据时,官方文档只支持单一类型的geojson数据加载,当一个geojson数据中出现两种类型的数据时可以尝试一下方法进行解决 本场景为:点击 ...

  7. Redis 的几种数据结构&五种数据类型对象

    先看几种数据结构 通过分析底层的数据结构,学习如何根据场景选型和设计 1,简单动态字符串 redis使用的字符串SDS有别于C语言中的字符串 a, 结构 free字段为已分配但未使用的空间 len为已 ...

  8. Redis学习笔记(三)Redis支持的5种数据类型的总结

    继续Redis学习笔记(二)来说说剩余的三种数据类型. 三.列表类型(List) 1.介绍 列表类型可以存储一个有序的字符串列表,常用的操作是向列表两端添加元素,或者获得列表的一段片段.列表类型内部是 ...

  9. 细说 JavaScript 七种数据类型

    在 JavaScript 规范中,共定义了七种数据类型,分为 “基本类型” 和 “引用类型” 两大类,如下所示: 基本类型:String.Number.Boolean.Symbol.Undefined ...

随机推荐

  1. 洛谷P4859 已经没有什么好害怕的了 [DP,容斥]

    传送门 思路 大佬都说这是套路题--嘤嘤嘤我又被吊打了\(Q\omega Q\) 显然,这题是要\(DP\)的. 首先思考一下性质: 为了方便,下面令\(k=\frac{n+k}{2}\),即有恰好\ ...

  2. oracle数据库内存调整之增加内存

    注:本文来源:小颜Kevin   <oracle数据库内存调整之增加内存> 模拟操作系统内存从2G增加为8G后,调整数据库内存参数,示例中参数不作为实际生产环境参考,因为因需所取,调整参数 ...

  3. Confluence 6 配置数据库查询超时时间

    如果数据库的查询时间太长同时你的应用程序显示没有响应,你可以配置数据库的查询超时时间.在默认情况下 Confluence 没有超时时间.希望配置数据库查询超时时间,在你的测试服务器上进行下面的操作: ...

  4. Confluence 6 编辑自定义 Decorators

    希望对 Confluence 的 decorator 进行编辑的话,你需要具有良好的 HTML 知识和能够理解  Velocity 模板语言. 希望编辑 decorator 文件: 进入  Confl ...

  5. LeetCode(92):反转链表 II

    Medium! 题目描述: 反转从位置 m 到 n 的链表.请使用一趟扫描完成反转. 说明:1 ≤ m ≤ n ≤ 链表长度. 示例: 输入: 1->2->3->4->5-&g ...

  6. 【linux】环境变量配置

    假设要添加环境变量 JAVA_HOME 1.先用自己的个人账号 vim /etc/profile 在文件末尾添加 export JAVA_HOME=/usr/java/jdk1..0_144 2. s ...

  7. java Web工程师面试题集绵

    一.Java 基础 1.JDK .JRE 和JVM关系是什么? 答:A. JDK(Java Development Kit)即Java开发工具包,包含编写Java程序所必须的编译.运行等开发工具以及J ...

  8. bzoj 2427

    非常好的一道题,可以说是树形dp的一道基础题 首先不难发现,:如果我们把有关系的两个点用有向边相连,那么就会形成一个接近树的结构.如果这是一棵完美的树,我们就可以直接在树上打背包了 但是这并不是一棵完 ...

  9. json数组

    <!DOCTYPE html><html><head> <meta charset="utf-8"> <title>js ...

  10. 【C#】wpf中的xmlns命名空间为什么是一个网址,代表了什么意思(转载)

    原文:https://blog.csdn.net/catshitone/article/details/71213371 新建一个wpf的项目,我们先来看下它默认的命名空间都是哪些? 可以看到xmln ...