Which is the best way to find out whether the division of two numbers will return a remainder?
Let us take for example, I have an array with values {3,5,7,8,9,17,19}. Now I need to find the perfect divisor of 51 from the above array. Is there any simpler way to solve this?
Jens Gustedt
76.4k6 gold badges101 silver badges176 bronze badges
asked Aug 9, 2011 at 9:24
1
You can use the %
operator to find the remainder of a division, and compare the result with 0
.
Example:
if (number % divisor == 0)
{
//code for perfect divisor
}
else
{
//the number doesn't divide perfectly by divisor
}
answered Aug 9, 2011 at 9:26
Mircea NistorMircea Nistor
3,1181 gold badge26 silver badges32 bronze badges
3
Use the modulus operator %
, it returns the remainder.
int a = 5;
int b = 3;
if (a % b != 0) {
printf("The remainder is: %i", a%b);
}
answered Aug 9, 2011 at 9:25
MByDMByD
135k28 gold badges264 silver badges275 bronze badges
7
All the above answers are correct. Just providing with your dataset to find perfect divisor:
#include <stdio.h>
int main()
{
int arr[7] = {3,5,7,8,9,17,19};
int j = 51;
int i = 0;
for (i=0 ; i < 7; i++) {
if (j % arr[i] == 0)
printf("%d is the perfect divisor of %dn", arr[i], j);
}
return 0;
}
answered Aug 9, 2011 at 9:33
harihari
9,38327 gold badges74 silver badges110 bronze badges
1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
// секция заголовочных файлов #include <stdio.h> #include <math.h> // секция обявлений и прототипов int main(void); // секция с телами функций int main(void) { unsigned int S = 0; unsigned int A = 0; unsigned int B = 0; unsigned int C = 0; unsigned int D = 0; unsigned int E = 0; unsigned int x = 0; int a[]={50, 100, 500, 1000, 5000}; // массив a содержит 5 элементов S = 49; A = 99; B = 499; C = 999; D = 4999; E = 5000; scanf("%d", &x); if (x <= S) { printf("%dn", x); }else{ if ( x <= A ) { printf("%d %s %d %dn",x/a[0],"X" ,a[0], x%a[0] ); }else{ if(x <= B) { printf("%d %s %d %dn",x/a[1],"X" ,a[1], x%a[1] ); return(1); }else{ if(x <= C) { printf("%d %s %d %dn",x/a[2],"X" ,a[2], x%a[2] ); return(2); }else{ if(x <= D) { printf("%d %s %d %dn",x/a[3],"X" ,a[3], x%a[3] ); return(1); }else{ if(x >= E) { printf("%d %s %d %dn",x/a[4],"X" ,a[4], x%a[4] ); return(1); } } } } } } return(0); } |
Формулировка задачи:
В общем здесь проблема такая дано 2 массива a и tmp, первый обычный, второй-список. Мне нужно определенную часть элементов первого массива разделить на каждый элемент второго. Если остаток деления ноль, то занулить элемент первого массива. VS ругается на строку условия.
for (int i = p, j = 0; i < N; i++) { if (a[i] % tmp[j] != 0) //ошибка здесь { a[i] = 0; j++; } }
Подскажите, пожалуйста, что не так?
Код к задаче: «Массивы и остаток от деления»
textual
List<int> tmp = new List<int>(); int[] a = new int[cnt]; for (int i = 0; i < cnt; i++) { a[i] = i; } a[0] = 0; a[1] = 0; for (int i = 0; i < a.Length; i++) { if (a[i] == 0) continue; tmp.Add(a[i]); for (int j = i + 1; j < a.Length - (i + 1); j++) { if (a[j] == 0) continue; if (a[j] % i == 0) { a[j] = 0; } } }
Полезно ли:
8 голосов , оценка 4.250 из 5
Возвращает остаток от деления по элементам.
Вычисляет остаток, дополнительный к функции floor_divide
. Он эквивалентен оператору модуля Python x1% x2 и имеет тот же знак, что и делитель x2
. Функция MATLAB, эквивалентная np.remainder
, — это mod
.
Warning
С этим не стоит путать:
-
math.remainder
Python 3.7 иremainder
C , который вычисляет остаток IEEE, который является дополнением кround(x1 / x2)
. - Функция MATLAB
rem
и / или оператор C%
, который является дополнением кint(x1 / x2)
.
- Parameters
-
- x1array_like
-
Dividend array.
- x2array_like
-
Массив делителей. Если
x1.shape != x2.shape
, они должны транслироваться в общую форму (которая становится формой вывода). - out ndarray, None или кортеж из ndarray и None, необязательно
-
Место,в которое сохраняется результат.Если предоставлено,оно должно иметь форму,на которую транслируются входы.Если не указано или None,возвращается свежераспределенный массив.Кортеж (возможен только как аргумент ключевого слова)должен иметь длину,равную количеству выходов.
- wherearray_like, optional
-
Это условие транслируется по входу. В местах, где условие истинно, массив
out
будет установлен на результат ufunc. В другомout
массив out сохранит свое исходное значение. Обратите внимание , что если инициализированout
массива создается по умолчаниюout=None
, места в нем , где условие ложно будет оставаться инициализирован. - **kwargs
-
Для других аргументов, содержащих только ключевые слова, см. Документацию ufunc .
- Returns
-
- yndarray
-
floor_divide(x1, x2)
остаток от частного floor_divide (x1, x2) . Это скаляр, если иx1
, иx2
являются скалярами.
Notes
Возвращает 0, если x2
равно 0, и оба x1
и x2
являются целыми числами (массивами). mod
— это псевдоним remainder
.
Examples
>>> np.remainder([4, 7], [2, 3]) array([0, 1]) >>> np.remainder(np.arange(7), 5) array([0, 1, 2, 3, 4, 0, 1])
Оператор %
может использоваться как сокращение для np.remainder
в ndarrays.
>>> x1 = np.arange(7) >>> x1 % 5 array([0, 1, 2, 3, 4, 0, 1])
по сей день актуален для многих новичков вопрос!
формула по теореме такая: a = b*c +r
где:
a
— делимое (что делим)b
— делитель (на что делим)с
— целое число до запятой от результата деления (поэтому в случаеa<b
всегда будет 0 ноль)r
— то, что нужно прибавить, чтобы формула наша сошлась (тот самый измученный нами «остаток»! :))
Например, если мы хотим увидеть остаток от деления a=1
на b=6
:
1 = 6*c + r
(с = 1/6=0,###)
поэтому
1 = 6*0 + r
r = 1 - 0 = 1
a%b=1
Второй пример когда a>b
,
a=8
, b=3
:
8 = 3*с + r
(с = 8/3=2,###)
поэтому
8 = 3*2 + r
r = 8 - 6 = 2
a%b=2
Этот самый расчудесный остаток % при условии a<b может использоваться, например, в коде js для универсальных циклов с массивами (таких как зацикленные слайдеры и т.п., где количество элементов в массиве может изменяться и не должно влиять на исполняемый код)