OR134. 幸运数字
描述
小雅同学认为6,8是她的幸运数字,而其他数字均不是,一个幸运数是指在十进制表示下只含有幸运数字的数。给定你一个区间(a,b)a和b之间(其中包括a和b幸)运数的个数。
输入描述
输入两个整数a和b,a的取值范围在1和1000000000之间(其中包括1和1000000000),b的取值范围在a和1000000000之间(其中包括a和1000000000)。输出描述
返回a和b之间的幸运数个数,如果入参不合法,请输出-1示例1
输入:
1 10
输出:
2
说明:
6,8,6666,88888,6668888,68686688均为幸运数字,当a=1,b=10函数返回值为2。C 解法, 执行用时: 2ms, 内存消耗: 232KB, 提交时间: 2019-01-15
#include<stdio.h> #include<stdlib.h> int a; int b; int count = 0; int intlen(int num) { int i=0; while(num) { num/=10; i++; } return i; } void foo(char cs[], int index,int len) { if(len>=10) { return; } if (index == len) { int num = atoi(cs); if (num >= a && num <= b) { count++; } return; } for (int i = 0; i < 2; i++) { if (i == 0) { cs[index] = '6'; } else { cs[index] = '8'; } foo(cs, index + 1, len); } } int main() { scanf("%d",&a); if (a < 1 || a > 1000000000) { printf("-1\n"); return 0; } scanf("%d",&b); if (b < a || b > 1000000000) { printf("-1\n"); return 0; } int lenA = intlen(a); int lenB = intlen(b); for (int i = lenA; i <= lenB; i++) { char cs[i]; foo(cs, 0, i); } printf("%d\n",count); return 0; }
C 解法, 执行用时: 2ms, 内存消耗: 304KB, 提交时间: 2021-09-20
#include <stdio.h> #include <math.h> #include <stdbool.h> void f(int a,int b,int arr[]) { for(int i=0,j=2;arr[j-1]<=b;i++) { arr[j++]=arr[i]*10+6; arr[j++]=arr[i]*10+8; } } int main() { long long int a,b; while(scanf("%lld %lld",&a,&b)!=EOF) { if(a<1 || b<1 || b<a || a>1000000000 || b>1000000000) { printf("%d\n",-1); continue; } int arr[10000]={6,8}; f(a,b,arr); int i=0,sum=0; while(arr[i]<=b) { if(a<=arr[i] && arr[i]<=b) sum++; i++; } printf("%d\n",sum); } return 0; }