newcoder Tachibana Kanade Loves Probability(小数点后第k位)题解

题意:
题目链接
立华奏在学习初中数学的时候遇到了这样一道大水题:
“设箱子内有 n 个球,其中给 m 个球打上标记,设一次摸球摸到每一个球的概率均等,求一次摸球摸到打标记的球的概率”
“emmm...语言入门题”
但是她改了一下询问方式:设最终的答案为 p ,请输出 p 小数点后 K1K1 到 K2K2 位的所有数字(若不足则用 0 补齐)

思路:上次好像蓝桥杯看到过,暴力骗了80分没做了。还是自己菜啊,显然我们模拟除法的过程是 m * 10 % n * 10 % n * 10 % n......,那不就是m * (10 ^ k1-1 % n) % n吗,直接快速幂不就好了吗

代码:

#include<cmath>
#include<cstdio>
#include<vector>
#include<cstring>
#include <iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
const int maxn = 5000 + 10;
const double INF = 0x3f3f3f3f;
ll ppow(ll a, ll b, ll c){
    ll ret = 1;
    while(b){
        if(b & 1) ret = ret * a % c;
        b >>= 1;
        a = a * a % c;
    }
    return ret;
}
int main(){
    ll t, n, m, k1, k2;
    cin >> t;
    while(t--){
        cin >> m >> n >> k1 >> k2;
        ll tmp = ppow(10, k1 - 1, n);
        m = m * tmp % n;
        for(int i = k1; i <= k2; i++){
            m *= 10;
            printf("%d", m / n);
            m %= n;
        }
        cout << endl;
    }
    return 0;
}

原文地址:https://www.cnblogs.com/KirinSB/p/10661350.html

时间: 2024-10-11 06:12:13

newcoder Tachibana Kanade Loves Probability(小数点后第k位)题解的相关文章

EL表达式jsp页面double小数点后保留两位

EL表达式jsp页面double小数点后保留两位,四舍五入 <fmt:formatNumber type="number" value="${member.loginBonusAmount } " maxFractionDigits="2"/> maxFractionDigits:保留几位小数

Java中String转换Double类型 Java小数点后留两位

Java中String转换Double类型 double num1 = 0.0; String qq = "19.987"; num1 = Double.valueOf(qq.toString()); 太祖元年 Java小数点后留两位 double num1 =11; double num1 =21; String num1 =""; DecimalFormat df = new DecimalFormat(".00");num3 = df.fo

C# 小数点后保留两位小数,四舍五入的函数及使用方法

Math.Round(45.367,2)     //Returns   45.37 Math.Round(45.365,2)     //Returns   45.36 说明: C#中的Round()不是我们中国人理解的四舍五入,是老外的四舍五入,是符合IEEE标准的四舍五入,具体是五舍六入. 下面的才是符合中国人理解的四舍五入 Math.Round(45.367,2,MidpointRounding.AwayFromZero);    //Returns   45.37 Math.Round

小数点后保留2位小数的正则表达式

一.前提 整数和小数,保留两位小数的正则表达式: 具体什么意思呢 ^(([1-9]{1}\\d*)|([0]{1}))(\\.(\\d){0,2})?$ 二.知识点 1.首先从写法上可以看出,使用了显式定义正则表达式的语法,因为其中存在对字符串"\"(反斜杠)的转义    2.正则表达式的定义共有2种方式:显示定义和隐式定义 1 /*\d是正则表达式中的元字符,用于匹配数字,相当于[0-9],所以[0-9]也可以写成\d*/ 2 var myregex = new RegExp(&qu

C++ Ouput Exactly 2 Digits After Decimal Point 小数点后保留三位数字

在C++编程中,有时候要求我们把数据保留小数点后几位,或是保留多少位有效数字等等,那么就要用到setiosflags和setprecision函数,记得要包含头文件#include <iomanip>,请参考下面的示例: #include <iostream> #include <iomanip> // Need this using namespace std; int main() { float a = 4, b = 3, c = 2; cout <<

js小数点后保留两位

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Test</title> <script type="text/javascript" src="http://lib.sinaapp.com/js/jquery/1.9.1/jquery-1.9.1.min.js"></script>

Java 四舍五入并小数点后保存两位,千分位分隔

import java.text.DecimalFormat; public class FileTest {    public static void main(String[] args) {        DecimalFormat df = new DecimalFormat("#,##0.00");        System.out.println(df.format(12345.626));        System.out.println(df.format(123

显示的数据,小数点后保留2位

1. GridView中用DataFormatString="{0:F}" <asp:GridView ID="gvPartDetail" runat="server" AutoGenerateColumns="False" CellPadding="4" Font-Names="Arial" Font-Size="10pt" AllowPaging="

java中判断数字带小数点后取两位

<span style="white-space:pre"> </span>String a="123.23"; Pattern pattern = Pattern.compile("^(([1-9]{1}\\d*)|([0]{1}))(\\.(\\d){0,2})?$"); Matcher isNum = pattern.matcher(a); if( !isNum.matches() ){ System.out.pri