问题描述
给定n和len,输出n!末尾len位。
输入格式
一行两个正整数n和len。
输出格式
一行一个字符串,表示答案。长度不足用前置零补全。
样例输入
6 5
样例输出
00720
数据规模和约定
n<=30, len<=10。
分析:1.每次只要取后len位的数字就够了,输出的时候位数不够要补0
2.判断数字位数的时候可以取以10为底的对数(蓝桥杯不支持c++ 11中的to_string()方法哦~)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#include <iostream> #include <cmath> using namespace std; int main() { int n, len, cnt = 0; cin >> n >> len; long long res, ans = 1, m = pow(10, len); for (int i = 1; i <= n; i++) ans = (ans * i) % m; if (ans == 0) cnt = 1; else cnt = log10(ans) + 1; string s(len - cnt, '0'); printf("%s%lld", s.c_str(), ans); return 0; } |
❤ 点击这里 -> 订阅《PAT | 蓝桥 | LeetCode学习路径 & 刷题经验》by 柳婼