zoukankan      html  css  js  c++  java
  • bzoj 4292: [PA2015]Równanie

    Description

    对于一个正整数n,定义f(n)为它十进制下每一位数字的平方的和。现在给定三个正整数k,a,b,请求出满足a<=n<=b且k*f(n)=n的n的个数。
     

    Input

    第一行包含三个正整数k,a,b(1<=k,a,b<=10^18,a<=b)。
     

    Output

    输出一个整数,即满足条件的n的个数。
     

    Sample Input

    51 5000 10000

    Sample Output

    3

    HINT

    满足的3个n分别为7293,7854和7905。

    解题:f(n)显然很小,然后枚举f(n)判断n是否满足条件即可,嗯当f(n)*k大于b的时候要及时退出,不然没搞明白溢出后到底哪里出错了T T

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 using namespace std;
     5 int main()
     6 {
     7     long long k,a,b,cnt=0;
     8     scanf("%lld%lld%lld",&k,&a,&b);
     9     for(int i=1;i<=1500;i++)
    10     {
    11         if(i*k > b)break;
    12         long long n = k * i;
    13         if(n < a || n > b)continue;
    14         long long v = 0,temp = n;
    15         while(n)
    16         {
    17             int u = n % 10;
    18             v += u * u;
    19             n /= 10;
    20         }
    21         if(v == i)
    22         {
    23             cnt++;
    24         }
    25     }
    26     printf("%lld
    ",cnt);
    27     return 0;
    28 }
  • 相关阅读:
    Day3-spark基本认识
    团队冲刺第九天
    团队冲刺第八天
    团队冲刺第七天
    团队冲刺第六天
    团队冲刺第五天
    团队冲刺第四天
    团队冲刺第三天
    团队冲刺第二天
    团队冲刺第一天
  • 原文地址:https://www.cnblogs.com/philippica/p/4890737.html
Copyright © 2011-2022 走看看