Top.Mail.Ru
Ответы

Язык си Найти все делители натурального числа N и вывести их в порядке возрастания и убывания.

Нет, не через логические операции, не через \n в новой строке не получается написать этот код без пробела в конце. Мой сайт шараги не принимает такой ответ. (нет, некоторые сдали и сказали что можно в конце без пробела написать.) Просто помогите. Напишите ответ. Я не могу отвечать на комментарии закончился лимит
do {
if (n % b == 0 || n==0)
{
printf("%d", b);
}
b++;
} while (b <= n);
printf("\n");
do{
if (n % i == 0|| n==0)
{
printf("%d", i);
}
i--;
} while (i>0);
printf("\n");
}

Дополнен

нет, в пробеле. если я так сказал, значит так. Код работает правильно, Кумыс Витальевич.

Только авторизированные пользователи могут оставлять свои ответы
Дата
Популярность
Аватар пользователя
Новичок

for (b = 1; b <= n; ++b) {
if (n % b == 0) {
if (b !== 1) { printf(" "); }
printf("%d", b);
}
}
printf("\n");

for (b = n; b >= 1; --b) {
if (n % b == 0) {
if (b !== n) { printf(" "); }
printf("%d", b);
}
}
printf("\n");

Аватар пользователя
Мудрец

#include <stdio.h>
int main()
{
int n, i=2;
scanf_s("%d", &n);
printf("1");// число 1 выводится всегда
while (i <= n)
{
if (n % i == 0)
{
printf(" %d", i);
}
i++;// при выходе из цикла i == n + 1
}// однако, если входа в цикл не было, то i == 2
printf("\n");
while (i>2)// если в первый цикл входа не было, то и во второй цикл входа не будет!
{
i--;
if (n % i == 0 )
{
printf("%d ", i);
}
}
printf("1");// число 1 выводится всегда
return 0;
}

Аватар пользователя
Просветленный

Если число n небольшое (скажем, до миллиарда !), то можно так:
#include "stdio.h"
int main() { int i,m,n; for (;;) { printf
("n = ?\b"); scanf("%d",&n); m=n/2; if (n==1) { printf("1\n1\n"); continue; } else { printf("1,"); for (i=2; i<=m; i++) if (n%i==0) printf("%d,",i); printf("%d\n",n); printf("%d,"n); for (i==m; i>1; i--) if (n%i==0) printf("%d,",i); printf("1\n"); } } return 0; }
Однако если n очень большое (например, двадцатизначное !) такой метод явно не годится и надо использовать совершенно иной подход, хотя он и более громоздкий !..
(P.S. И причём тут вообще пробел в конце ?)

Аватар пользователя
Высший разум

#include <stdio.h>
int main(){
 int n, i;
 scanf("%d", &n);
 for(i = 1; i <= n; ++i)
  if(!(n % i))
   i == 1? printf("%d", i) : printf(" %d", i);
 for(i = n; i >= 1; --i)
  if(!(n % i))
   i == n? printf("\n%d", i) : printf(" %d", i); 
}

Аватар пользователя
Просветленный

ну так у тебя числа подряд выводиться будут: 1235610, поставь пробел между ними.
ну или вот:
for (int i = 1; i <= n; ++i) if (n % i == 0) printf("%d ", i);
for (int i = n; i > 0; --i) if (n % i == 0) printf("%d ", i);
--
обычно проверочные системы игнорируют "лишний" пробел в конце вывода, так что думаю дело не в нем