TCreopargh
书山有路搞为径,学海无涯机作舟。
乱搭的站

(C++)水仙花数

问题描述
keyboard_arrow_down

水仙花数是指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身。(例如:1^3 + 5^3 + 3^3 = 153)。定义一个函数int fun(int a, int b),计算区间[a,b]或[b,a]的水仙花数。

输入说明
keyboard_arrow_down

第一行1个整数m(100 > m >0),表示有多少组数据。每行表示一组数据,每组数据由两个整数a和b构成,计算[a,b]或[b,a]间的水仙花数,a和b之间用空格分隔。

输出说明
keyboard_arrow_down

输出区间[a,b]或[b,a]的水仙花数数量,换行。

输入样例
keyboard_arrow_down

2
3 1000
400 5000

输出样例
keyboard_arrow_down

4

2

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
//Powered by TCreopargh
#include<iostream>
#include<cmath>
#include<cstring>
using namespace std;
int fun(int a,int b)
{
    int temp,tot=0;
    if(a>b)
        {
            temp=a;
            a=b;
            b=temp;
        }
        for(int i=a; i<=b; i++)
        {
            if(i<10) continue;
            int len=0,sum=0;
            long long currExp=1;
            do
            {
                currExp*=10;
                len++;
            }while((int)(i/currExp)!=0);
            currExp=1;
            do
            {
                currExp*=10;
                sum+=pow((i%currExp)/(currExp/10),len);
            }while(i/currExp>=1);
            if(sum==i)
                tot++;
        }
    return tot;
}
int main()
{
    int n,a,b;
    cin>>n;
    for(int k=0; k<n; k++)
    {
        cin>>a>>b;
        cout<<fun(a,b)<<endl;
    }
    return 0;
}
赞赏

发表回复

textsms
account_circle
email

乱搭的站

(C++)水仙花数
问题描述 keyboard_arrow_down 水仙花数是指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身。(例如:1^3 + 5^3 + 3^3 = 153)。定义一…
扫描二维码继续阅读
2018-10-28