题目链接: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. input file 多张图片上传 获取地址 ——fileReader

    //上传图片 $('#files').change(function(e){ var fil = this.files; var m =0; if(fil.length>3){ alert('重 ...

  2. 计算机信息类ComputerInfo(车)

    using System; using System.Management; using System.Net; using System.Net.Sockets; using System.Text ...

  3. bat脚本(转)

    偶尔用到,搜到不错的资料,所以转一下: windows bat脚本for循环中对变量循环赋值 http://blog.csdn.net/u010161379/article/details/50956 ...

  4. kafka 的安装部署

    Kafka 的简介: Kafka 是一款分布式消息发布和订阅系统,具有高性能.高吞吐量的特点而被广泛应用与大数据传输场景.它是由 LinkedIn 公司开发,使用 Scala 语言编写,之后成为 Ap ...

  5. The import util cannot be resolved

    代码: 明显的错误: 应改成 import java.util.*; 没有理解java的基本概念

  6. 在anaconda中安装tensorflow

    打开Anaconda Prompt, step1: 输入清华仓库镜像 conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/ ...

  7. phpstorm2017.2.1破解

    今天安装phpstorm时看了网上很多破解方法,基本上都是用http://idea.lanyus.com/ 提供的注册码或者直接在license server上粘贴譬如http://idea.lany ...

  8. poj2817状态压缩 升维

    /* 两两求出字符串之间最大可以匹配的值 由已知状态推导出位置状态 状态s表示已经加入到集合中的字符串,0表示串i不存在,1存在 由于字符串的加入顺序会影响结果,所以增加一维来表示 dp[S][i]表 ...

  9. Nginx详解十一:Nginx场景实践篇之Nginx缓存

    浏览器缓存: HTTP协议定义的缓存机制(如:Expires.Cache-control等) 当浏览器第一次请求的时候,浏览器是没有缓存的 第二次请求开始就有缓存了 校验过期机制 配置语法-expir ...

  10. java使用POI解析2007以上的Excel表格

    来自http://hao0610.iteye.com/blog/1160678 使用poi来解析Excel的xls和xlsx. 解析xls: package xls; import java.io.F ...