c - 这段c代码有什么问题?

标签 c algorithm integer integer-division

这是 Codeforces 上的一个问题,link

求线段[a , b]k可整除数的个数。换句话说,您需要找到满足 a ≤ x ≤ bx 可被 k 整除的整数值 x 的数量.

输入:
唯一一行包含三个空格分隔的整数 kab
(1 ≤ k ≤ 1018; -1018 ≤ a ≤ b ≤ 1018)。

输出:
打印所需的数字。

下面是我的源代码:

#include <stdio.h>    
#include <stdlib.h>

int count(int k,int a, int b)
{
   if(a>b)
      return 0;

   if(a%k!=0)
      return count(k,a+1,b);

   return 1+count(k,a+1,b);
}

int main()
{
    int k,a,b,counter;
    scanf("%d%d%d",&k,&a,&b);

    if(k==0)
       counter=0;
    else
       counter=count(k,a,b);

    printf("%d",counter);

    return 0;
}

现在的问题是,当我提交代码时,我得到了这个回复在测试 57 的错误答案。所以,如果有人能帮我找出问题所在。

最佳答案

我宁愿使用 for 循环:

for (int i = a; i < b; ++i) {
    if ((i % k) == 0) {
        printf("%d can be divided by %d\n", i, k);
        ++counter;
    }
}
printf("There are %d numbers divisible by %d between %d and %d\n", counter, k, a, b);

将输出:

-28 can be divided by 7
-21 can be divided by 7
-14 can be divided by 7
-7 can be divided by 7
0 can be divided by 7
7 can be divided by 7
14 can be divided by 7
21 can be divided by 7
28 can be divided by 7
There are 9 numbers divisible by 7 between -30 and 30

如果您输入:7-3030

关于c - 这段c代码有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35157936/

相关文章:

c - 如何循环勾股定理程序?

c++ - 以编程方式列出字符设备

algorithm - 贪心算法有没有可能也是动态规划算法?

c++ - 打印所有字符串,O(2^n) 算法

ruby - 如何干净地验证用户输入是否是 Ruby 中的整数?

C 字符串初始化。可能的麻烦

c - 无穷大作为合并排序中的哨兵?

image - 罪恶之城效应

java - 重写 getColumnClass 方法后,jTable 仍然错误地对数字进行排序

java - 由字节/短整型组成的 Java 数组比整数组成的内存效率更高吗?