HDU-Just a Numble-1/n.后m位

本文介绍了一种算法,用于计算任意正整数分之一形式的小数表示中,小数点后指定位置的数字。通过递归快速幂算法高效解决该问题,并提供了两种实现代码。
问题及代码:

Just a Numble

Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other)
Total Submission(s) : 1   Accepted Submission(s) : 1
Font: Times New Roman | Verdana | Georgia
Font Size:  

Problem Description

Now give you two integers n m, you just tell me the m-th number after radix point in 1/n,for example n=4,the first numble after point is 2,the second is 5,and all 0 followed

Input

Each line of input will contain a pair of integers for n and m(1<=n<=10^7,1<=m<=10^5)

Output

For each line of input, your program should print a numble on a line,according to the above rules

Sample Input

4 2
5 7
123 123

Sample Output

5
0
8

Author

YBB

Source

HDU 2007-10 Programming Contest_WarmUp

/*    
*Copyright (c)2015,烟台大学计算机与控制工程学院    
*All rights reserved.    
*文件名称:HDU.cpp    
*作    者:单昕昕    
*完成日期:2015年2月9日    
*版 本 号:v1.0        
*/<span style="font-family: monospace; font-size: 14px; line-height: 19.59375px; white-space: pre; background-color: rgb(240, 240, 240);"> //AC代码1</span>
#include<stdio.h>
long long solve(int m,int n)
{
    long long t;
    if(n==0)
        return 1;
    if(n==1)
        return 10%m;
    t=solve(m,n/2);
    t*=t;
    if(n%2==1)
        t*=10%m;
    return t%m;
}
int main()
{
    int n,m;
    while(scanf("%d%d",&m,&n)!=EOF)
        printf("%I64d\n",((10*solve(m,n-1))/m)%10);
        return 0;
}<p> //AC代码2</p><p>#include <iostream></p><p>using namespace std;</p><p>int main()</p><p>{</p><p>   int n,m,i,s,t;</p><p>   while(cin>>n>>m)</p><p>    {</p><p>       if(n==1)                         </p><p>           cout<<0<<endl;             //如果n为1,则输出0;</p><p>       else</p><p>       {</p><p>           s=10;</p><p>           for(i=1; i<=m; i++)         //计算小数点后面m位上的数字</p><p>           {</p><p> </p><p>                t=s/n;               </p><p>                s=s%n*10;              //如n=4,m=1,则有10/4=2;</p><p>           }                          //如n=4,m=2,则有s=10%4/*10=20,20/4=5;</p><p>           cout<<t<<endl;              </p><p>       }</p><p>    }</p><p>   return 0;</p><p>}</p>



运行结果:


知识点总结:


对于输入m,n 
则有1/m=0.xxxx...xxxaxxx 
其中a为小数点后第n位即所求的答案 
接下来a=(10^n/m)%10; 
存在b,c使得10^n=m*b*10+c (其中c=(10^n)%(10*m)=10*(10^(n-1))%m即c<10*m); 
所以a=((m*b*10+c)/m)%10=(b*10+c/m)%10=(c/m)%10=c/m; 
这个过程中只要求c就能求出a=c/m; 
而c=10*(10^(n-1))%m这个可用二分递归求解如程序中的10*solve(m,n-1)) 
所以a=(10*solve(m,n-1))/m;保险起见加了个"%10";

学习心得:

度娘出品,必属优品。

LATFORM: Vendoroh 3.1.400 > Hi3861 HARDWARE: HI3861 900MHz, DEBUG: Current (jlink) On-board (jlink) Building in debug mode Verbose mode can be enabled via `-v, --verbose` option builder(["src\out\hispark_pegasus\wifiiot_hispark_pegasus\target.elf"], []) pip installed. ohos-build installed. SCons installed. [OHOS INFO] [1/2] ACTION //device/hisilicon/hispark_pegasus/sdk_liteos:run_wifiiot_scons(//build/lite/toolchain:riscv32-unknown-elf) [OHOS ERROR] [327/328] ACTION //device/hisilicon/hispark_pegasus/sdk_liteos:run_wifiiot_scons(//build/lite/toolchain:riscv32-unknown-elf) [OHOS ERROR] FAILED: obj/device/hisilicon/hispark_pegasus/sdk_liteos/run_wifiiot_scons_build_ext_components.txt [OHOS ERROR] C:\Users\小郭\AppData\Local\Programs\Python\Python38\python.exe ../../../build/lite/build_ext_components.py --path=../../../device/hisilicon/hispark_pegasus/sdk_liteos "--command=sh hm_build.sh E:/hi3861_hdu_iot_application/src/out/hispark_pegasus/wifiiot_hispark_pegasus win" --target_dir=E:/hi3861_hdu_iot_application/src/out/hispark_pegasus/wifiiot_hispark_pegasus/obj/device/hisilicon/hispark_pegasus/sdk_liteos/build.log --out_dir=E:/hi3861_hdu_iot_application/src/out/hispark_pegasus/wifiiot_hispark_pegasus/error.log [OHOS ERROR] CreateProcess failed: The system cannot find the file specified. [OHOS ERROR] [1/2] ACTION //device/hisilicon/hispark_pegasus/sdk_liteos:run_wifiiot_scons(//build/lite/toolchain:riscv32-unknown-elf) [OHOS ERROR] FAILED: obj/device/hisilicon/hispark_pegasus/sdk_liteos/run_wifiiot_scons_build_ext_components.txt [OHOS ERROR] C:\Users\小郭\AppData\Local\Programs\Python\Python38\python.exe ../../../build/lite/build_ext_components.py --path=../../../device/hisilicon/hispark_pegasus/sdk_liteos "--command=sh hm_build.sh E:/hi3861_hdu_iot_application/src/out/hispark_pegasus/wifiiot_hispark_pegasus win" --target_dir=E:/hi3861_hdu_iot_application/src/out/hispark_pegasus/wifiiot_hispark_pegasus/obj/device/hisilicon/hispark_pegasus/sdk_liteos/build.log --out_dir=E:/hi3861_hdu_iot_application/src/out/hispark_pegasus/wifiiot_hispark_pegasus/error.log [OHOS ERROR] CreateProcess failed: The system cannot find the file specified. [OHOS ERROR] [1/2] ACTION //device/hisilicon/hispark_pegasus/sdk_liteos:run_wifiiot_scons(//build/lite/toolchain:riscv32-unknown-elf) [OHOS ERROR] FAILED: obj/device/hisilicon/hispark_pegasus/sdk_liteos/run_wifiiot_scons_build_ext_components.txt [OHOS ERROR] C:\Users\小郭\AppData\Local\Programs\Python\Python38\python.exe ../../../build/lite/build_ext_components.py --path=../../../device/hisilicon/hispark_pegasus/sdk_liteos "--command=sh hm_build.sh E:/hi3861_hdu_iot_application/src/out/hispark_pegasus/wifiiot_hispark_pegasus win" --target_dir=E:/hi3861_hdu_iot_application/src/out/hispark_pegasus/wifiiot_hispark_pegasus/obj/device/hisilicon/hispark_pegasus/sdk_liteos/build.log --out_dir=E:/hi3861_hdu_iot_application/src/out/hispark_pegasus/wifiiot_hispark_pegasus/error.log [OHOS ERROR] CreateProcess failed: The system cannot find the file specified. [OHOS ERROR] you can check build log in E:\hi3861_hdu_iot_application\src\out\hispark_pegasus\wifiiot_hispark_pegasus\build.log [OHOS ERROR] command: "E:\hi3861_hdu_iot_application\src\prebuilts\build-tools\win64-x64\bin\ninja.exe -w dupbuild=warn -C E:\hi3861_hdu_iot_application\src\out\hispark_pegasus\wifiiot_hispark_pegasus" failed [OHOS ERROR] return code: 1 [OHOS ERROR] execution path: E:\hi3861_hdu_iot_application\src [src\out\hispark_pegasus\wifiiot_hispark_pegasus\target.elf] Error -1 process_command_results: 1
最新发布
09-21
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值