题目链接: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. centos6.5 python命令行模式左右建无法使用

    我的虚拟机是centos6.5,自带python2.6:安装了Python2.7(安装了pip管理工具)后,在python2.7命令行模式下,左右键及退格键无法使用,基于以上情况,我进行了百度: 第一 ...

  2. Confluence 6 使用 JMX 界面实时监控

    使用 JMX 界面(Java Management Extensions API ),你可以实时的查看你 Confluence 运行实例的状态. JMX 使用的对象被称 MBeans (Managed ...

  3. Confluence 6 开始编辑 CSS

    希望编辑空间的样式表: 进入到空间,然后在左侧边栏中选择 空间工具 > 界面外观(Space tools > Look and Feel). 选择 样式表(Stylesheet)然后选择 ...

  4. 遇到的一个移动端从下往上过渡的弹框,在Android下过渡动画的优化问题。

    优化之前: /* 分享弹框样式 */ .popUpDiv { width: 100vw; height: 100vh; transition: all 0.5s ease; position: fix ...

  5. python之多线程通信

    共享变量通信 事实上共享变量通信是会造成线程安全的,除非我们对这个共享变量是有足够了解的,如非必要就不要使用共享变量在线程间进行通信 Queue通信 理解不深入,暂不写

  6. day02 编程语言和变量

    编程语言 编程语言分为三种 机器语言:用计算机能听得懂的二进位制语言来写程序 汇编语言:用英文字母来代替二进位制来写的程序 高级语言(两种) 编译型语言(C语言):相当于谷歌翻译整个程序写好一次性写好 ...

  7. 调皮的HR

    如图:笔试题 # -*- coding: utf- -*- """ Created on Thu Apr :: @author: weilong "" ...

  8. JSP概述

    一.JSP页面本质上时一个Servlet,然而,用JSP开发比使用Servlet更容易,主要有两个原因,首先不必编译Servlet,其次JSP页面是一个以.jsp为扩展名的文本文件,可以使用任何编辑器 ...

  9. Java将文件中的内容转换为sql语句(和并发定时读取文件)

    数据文件内容data.txt {USER_TYPE=1,CREATE_USER=ZHANG,UPDATE_USER=li,OPER_NUM=D001,SRC=2,UPDATE_TIME=2018-11 ...

  10. 在centos6.8上源码安装MySQL

    1.安装环境:软件包:mysql-5.6.31.tar.gz 需求相关选项: 安装基目录basedir:/mydb/mysql31数据存放目录datadir:/mydb/mysql31/data端口号 ...