题目链接: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. 洛谷P4841 城市规划 [生成函数,NTT]

    传送门 题意简述:求\(n​\)个点的简单无向连通图的数量\(\mod \;1004535809​\),\(n \leq 130000​\) 经典好题呀!这里介绍两种做法:多项式求逆.多项式求对数 先 ...

  2. Confluence 6 配置校验和识别

    校验你的设置 查看你 Confluence 当前使用的设置,请参考 Viewing System Properties 页面中的内容. 识别系统属性 请参考 Recognized System Pro ...

  3. 爬虫框架之Scrapy

    一.介绍 二.安装 三.命令行工具 四.项目结构以及爬虫应用简介 五.Spiders 六.Selectors 七.Items 八.Item Pipelin 九. Dowloader Middeware ...

  4. 【python】del

    参考:http://blog.csdn.net/love1code/article/details/47276683 del 删除的是变量,不是数据! if __name__=='__main__': ...

  5. Fatal error: Uncaught Error: Call to undefined function mysqli_connect()

    sudo apt-get install php7.2-mysql  //版本号肯能不一样 sudo dpkg-reconfigure  php7.2-mysql sudo /etc/init.d/m ...

  6. 前端生成pdf文件之pdfmake.js

    转载:点击查看原文 pdfmake.js是一个简单的生成pdf文件的插件. pdfmake.js     https://files.cnblogs.com/files/s313139232/pdfm ...

  7. C++ Primer 笔记——lambda表达式

    1.一个lambda表达式表示一个可调用的代码单元,可以理解为一个未命名的内联函数,但是与函数不同,lambda表达式可能定义在函数内部.其形式如下: [capture list] (paramete ...

  8. 常见的User-Agent及免费代理IP网站

    常见的User-Agent 1.Android Mozilla/5.0 (Linux; Android 4.1.1; Nexus 7 Build/JRO03D) AppleWebKit/535.19 ...

  9. HDU 2112 HDU Today(最短路径+map)

    HDU Today Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  10. python练习册0006

    第 0006 题:你有一个目录,放了你一个月的日记,都是 txt,为了避免分词的问题,假设内容都是英文,请统计出你认为每篇日记最重要的词. import re import os def get_li ...