具有n个数字的数字可被给定数字整除

时间:2015-10-06 16:53:42

标签: c++ modulo

我需要找到任意数字> 0,其中n位数(< = 10)可被数字m整除(< = 10)。

这是我试过的:

#include <bits/stdc++.h>
using namespace std;

int main() {
    int n, t, k, r=1;
    cin>>n>>t;
    k=n;
    while(k--)
        r*=10;  // i am making 10^n
    r/=10;      // a 0 was in plus

现在我从10 ^ n到10 ^ n + 10搜索一个可被t整除的数字,知道我有t&lt; = 10,我应该有一个可被它整除的数字。

    for(int i=r; i<=r+10; ++i)
    if(i%t==0){
            cout<<i;
            return 0;
    }
}

我只有这个例子:

3 2

答案是712,但我可以输出任何内容。

对于输入我的代码是错误的,我不知道为什么。

4 个答案:

答案 0 :(得分:1)

如果您需要知道有多少N位数可以除以M,那么使用公式可以相当容易地完成。让我们说我们想要知道所有可被17整除的5位数字。我们所做的是找到最小的5位数,可以除以17.所以如果我们这样做

10000 % 17

当我们这样做时,我们会4

10000 - 4 + 17 

我们得到10013这是可以除以17的第一个5位数。现在我们需要知道在[10013,99999]范围内有多少17个多数。我们需要找到最大的5位整数,我们可以用简单的整数除法和乘法来得到它

99999 / 17 * 17 = 99994

获取我们拍摄的倍数

(max   - min  ) / 17
(99994 - 10013) / 17
    89981       / 17 = 5293

答案 1 :(得分:0)

<强>已更新 这是你需要的吗?

第一个数字n,是位数。 第二个数字m,是分隔符。

#include <iostream>
#include <string>

using namespace std;
int m, n;
bool searchDivisibleNumbers(int n, int m);

int main()
{
    cin >> n >> m;

    while (searchDivisibleNumbers(n,m))

    return 0;
}

bool searchDivisibleNumbers(int n, int m)
{
    int digits = pow(10, n-1); //huge number of n digits

    while (digits != 0){

        if (digits % m == 0){
            cout << digits << " is divisible by " << m << endl;
        }
        digits--;
    }
    return true;
}

输入:n = 3(3位)m = 17 输出:

    3 17
85 is divisible by 17
68 is divisible by 17
51 is divisible by 17
34 is divisible by 17
17 is divisible by 17
Press any key to continue . . .

答案 2 :(得分:0)

这是一个适合您的计划:

int main(void)
{
  int i = 0;
  cout << "Enter number: ";
  cin >> i;
  int m = 0;
  cout << "Enter divisor: ";
  cin >> m;
  if (m == 0)
  {
    cerr << "Can't divide by zero, aborting.\n";
    return EXIT_FAILURE;
  }
  cout << "Your number "
       << i;
  if ((i % m) == 0)
  {
    cout << " is divisible by " 
         << m
         << "\n";
  }
  else
  {
    cout << "not divisible by " << m << "\n";
  }
  return EXIT_SUCCESS;
}

您应该能够输入一个10位数字和一个除数m,并查看结果。

答案 3 :(得分:0)

这个问题有两种可能性。 1.如果M(<10)那么答案将是“MMMMMM ......”类型,最多为N位。 2.如果M(== 10)那么如果N == 1那么就没有可能的数字,因为没有一个数字可以被10整除,但是对于N> 1,答案将是“11111 ..”类型,直到N-1数字后跟'0'。