在c++中查找数字的倍数

问题描述 投票:0回答:1

最近,我试图在c++中找到从a到b(包括两者)范围内的数字n的倍数。这是我的方法:

  1. 通过将答案设置为 (b - a - 1) / n 来查找 a 到 b 范围内的 n 倍数(不包括两者)。

  2. 将答案设置为answer + 1 if a % n == 0 else to answer

  3. 如果 b % n == 0,则将答案设置为答案 + 1,否则为答案

  4. 打印答案

看起来很对。但问题在于这个测试:a = 4,b = 6,n = 5。该方法的作用是:

  1. 答案变为 (b - a - 1) / n = (6 - 4 - 1) / 5 = 0
  2. 答案仍然是 0,因为 4 不能被 5 整除。
  3. 答案仍然是 0,因为 6 不能被 5 整除。
  4. 输出为0。

结果是0,而输出应该是1,因为在4到6的范围内,出现了5,因此答案应该是1。

我也尝试过思考不同的方法来解决这个问题,但我没有想到。谁能告诉我这个问题有什么解决办法吗?请注意,您不能通过暴力来解决此问题,因为输入的约束如下:

1 <= a, b, n <= 1000000000 (10 to the power 9)

// Code for the above approach
#include <bits/stdc++.h>
using namespace std;

int main(){
    // Assigning the values as int
    int a, b, n;
    
    // Taking input
    cin >> a >> b >> n;
    
    // First step
    int ans = (b - a - 1) / n;
    
    // Second step
    ans += ((a % n) == 0? 1: 0);
    
    // Third step
    ans += ((b % n) == 0? 1: 0);
    
    // Last step
    cout << ans;
}
c++ math range factors
1个回答
0
投票

在我看来,断点在于这样一个事实:使用

(b - a - 1) / n
,您正在测试范围是否足够长以适合您的分隔符,但您不检查整数变量中的范围位置,即,如果分隔符可能已经在范围内。

您应该检查范围内的第一次出现:您只需检查

n
变量。从那里你可以继续你的其他方法......

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.