暑假热身 A. GCC
2015-08-16 11:53
211 查看
GCC编译器是一个由GNU项目维护的编译系统,它支持多种编程语言的编译。但是它并不包含数学运算符“!”。在数学中,这个符号代表阶乘。表达式n!的意思是从1到n的所有整数的乘积。
例如,4!=4*3*2*1=24. (0!定义为1) 现在请你写程序计算一下 (0! + 1! + 2! + 3! + 4! + ... + n!)%m。
每组测试数据单独一行,包括一个整数n和m,用一个空格隔开。
0 < T <= 20 0 <= n < 10^100 0 < m <= 10000
View Code
例如,4!=4*3*2*1=24. (0!定义为1) 现在请你写程序计算一下 (0! + 1! + 2! + 3! + 4! + ... + n!)%m。
Input
第一行是一个整数T,代表了测试数据的组数。每组测试数据单独一行,包括一个整数n和m,用一个空格隔开。
0 < T <= 20 0 <= n < 10^100 0 < m <= 10000
Output
对应每组输入,单独输出一行,给出(0! + 1! + 2! + 3! + 4! + ... + n!)%m的结果。Sample Input
1 10 1017
Sample Output
424 每算一次取一次余有效减少运算量。
#include <iostream> #include <cstdio> #include <cmath> using namespace std; int main() { long m; long n = 0; char ch[110]; int num, i; cin >> num; for (int test = 1; test <= num; test++) { scanf("%s %ld", ch, &m); for (i = 0; ch[i] != '\0'; i++) ; int len = i; if(len>=7) { n=m-1; } else { int k = 1; n = ch[len-1]-'0'; for (int j = len-2; j >= 0; --j) { n += long((ch[j] - '0') * pow(10.0, double(k))); k ++; if (n >= m) { n = m-1; break; } } } long long s = 1; for (i = n; i >= 1; i--) { s = (1 + i * s) % m; //s = 1 % m + ((i % m) * (s % m)) % m; } s %= m; cout << s << endl; } return 0; }
View Code
相关文章推荐
- 把握linux内核设计思想(十三):内存管理之进程地址空间
- windows下编译libx264,libx265,libvpx
- 使用C语言求N的阶乘的方法
- 采用SharedPreference保存用户偏好参数设置
- Android SQLite 简单使用示例
- 泛函编程(37)-泛函Stream IO:通用的IO处理过程-Free Process
- 字符串生成器
- 泛函编程(37)-泛函Stream IO:通用的IO处理过程-Free Process
- leetcode - Reverse Words in a String
- junit基础学习之-多线程测试(6)
- android ViewPager实现App主界面Tab菜单页面切换和点击事件
- javascript中 try catch用法
- 机房收费系统之(模块使用)
- android-音乐播放器实现及源码下载(四)
- HDU_1536 S-Nim(SG函数)
- CodeForces 500D - New Year Santa Network(DFS)
- linux基础命令(更新中......)
- 黑马程序员--oc和c的差异
- C++基础---指针与堆
- android-音乐播放器实现及源码下载(三)