有一个名为codewars的站点具有此DontGiveMeFive问题,您必须在给定范围内给出整数计数,而不计算数字5
出现的数字
Examples:
1,9 → 1,2,3,4,6,7,8,9 → Result 8
4,17 → 4,6,7,8,9,10,11,12,13,14,16,17 → Result 12
50,60 → 60 → Result 1
-59,-50 → → Result 0
public class MyClass {
public static int dontGiveMeFive(int start, int end)
{
int temp, i, j, count=0;
start = Math.abs(start);
end = Math.abs(end);
if(start>end)
{
temp = end;
end = start;
start = temp;
}
int num = (end-start)+1;
for(i=start;i<=end;i++)
{
j=i;
while(j!=0)
{
temp = j%10;
j = j/10;
if(temp==5)
{
count++;
j=0;
}
}
}
return (num-count);
}
}
发布于 2018-09-29 14:39:14
使用Java 8 Stream API,它可以非常简单地完成:
public long dontGiveMeFive(int from, int to) {
return IntStream.rangeClosed(from, to)
.mapToObj(String::valueOf)
.filter(n -> !n.contains("5"))
.count();
}
但是将数字转换为字符串并检查它是否包含5的方法也适用于Java 8之前的解决方案。
还应该注意的是,这种方法处理to
小于的情况from
,因为IntStream::rangeInclusive
照顾该部分。
发布于 2018-09-29 15:20:35
这样试试:
public class MyClass
{
public static int dontGiveMeFive(int start, int end)
{
assert (start <= end);
int temp, i, j, count=0;
int num = (end-start)+1;
for(i=start;i<=end;i++)
{
j=Math.abs(i);
while(j!=0)
{
temp = j%10;
j = j/10;
if(temp==5)
{
count++;
j=0;
}
}
}
return (num-count);
}
}
https://stackoverflow.com/questions/-100002814
复制相似问题