Project Euler 820

Project Euler 820

题目

Nth digit of Reciprocals

Let dn(x) be the nth decimal digit of the fractional part of x, or 0 if the fractional part has fewer than n digits. For example:

  • d7(1)=d7(12)=d7(14)=d7(15)=0
  • d7(13)=3 since 13=0.3333333333
  • d7(16)=6 since 16=0.1666666666
  • d7(17)=1 since 17=0.1428571428

Let S(n)=k=1ndn(1k). You are given:

  • S(7)=0+0+3+0+0+6+1=10
  • S(100)=418

Find S(107).

解决方案

与第 731 题一样。如果要求分数 ab 的第 n 位后的情况,那么相当于计算分数 a10n1b 的小数情况。这相当于直接将小数点右移了 n1 位。

并且我们不需要知道分数 a10n1b 的整数部分。为了方便计算,就求 a10n1%bb 的小数部分。

x=a10n1%bb,那么 10xb 就是 ab n 位的小数值。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <bits/stdc++.h>
# include "tools.h"
using namespace std;
typedef long long ll;
const int N=10000000;

int main(){
int ans=0;
for(int k=1;k<=N;k++){
int x=qpow(10,N-1,k);
ans+=x*10/k;
}
printf("%d\n",ans);
}

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
Ujimatsu Chiya 微信 微信
Ujimatsu Chiya 支付宝 支付宝