本文主要是介绍AOJ 840 下一个幸运数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题面:
Description
数字的每一位只可能是4或者7的称为幸运数,比如说4,7,44,474,7474都是幸运数,而54,40,444467777都不是幸运数。而数字A的下一个幸运数,表示的是大于等于A的最小的幸运数。比如4的下一个幸运数是4,而5的下一个幸运数是7。现在给出一个区间[L, R],求出区间内每个数的下一个幸运数的和。
Input
一个整数t,表示测试数据的组数(1<=t<=200)。
每组测试数据,两个整数L和R,空格隔开(1<=L<=R<=1000000000)。
Output
区间内每个数的下一个幸运数的和
Sample Input
3
4 4
3 4
4 7
Sample Output
4
8
25
大致思路:
打表求出所有的幸运数,一共有1023个(MD比赛时少打了最后一个)
然后分别判断l和r在第几个和第几个幸运数之间,累加就行了。
代码:
#include<iostream>
#include<cstring>
#include<cstdlib>
using namespace std;
long long number[1024];//这里存的是已经打好的表存在数组里,这里就不复制过来了,一共1023个
int main()
{ios::sync_with_stdio(false);int T;cin>>T;while(T--){long long l,r,ans1=0,ans2=0,ans3=0,ans=0;cin>>l>>r;int low=1,high=1023;while(1)//找l所在的区间,下面是找r所在的区间。其实可以用二分搜,但懒得搞了,一共就1000多个数,暴力一下也不是不行。{if(number[low]>=l&&number[low-1]<l)break;else++low;}
这篇关于AOJ 840 下一个幸运数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!