Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Пожалуйста разберитесь в моей проге!


Автор: Tyrant 13.2.2005, 00:22
Код
Найти все натуральные числа, которые не превышают n и делятся на каждую из своих цифр.

Я написал:
Код

#include <conio.h>
#include <stdio.h>
#include <math.h>
double chislo,cifra;
int n,c,ostatok,cifraint;
void main(){
//clrscr();
printf("n: ");
scanf("%i",&n);
for(int i=1;i<=n;i++)
{
chislo=i;
c=0;
ostatok=0;
while(chislo>1)
{
chislo/=10;
  cifra = modf(chislo, &chislo);
  cifra*=10;
  cifraint=cifra;
  if(!cifraint)
{
  c++;
 break;
}
  ostatok=i%cifraint;
  if(ostatok)
{
c++;
break;
}

}
if(!c)
printf("%i\n",i);
}
getch();
}

После 28-ми начинает глючить. Вообще мне кажется, что глючит с цифрами, которые заканчиваются на 8.
Помогите плз найти ошибку(или ошибки)...

Автор: chipset 13.2.2005, 00:26
Модератор: Название темы должно отражать ее суть!

Автор: IEZ 13.2.2005, 00:34
Да дебагом по брекпоинту пробежался по коду и посмотрел бы где не выполняется условие после 28-ми. smile

Автор: Alexandr87 13.2.2005, 10:47
cifraint=cifra;
при i=33
cifra 3.00000000
ciraint=2

Автор: Tyrant 13.2.2005, 14:37
Цитата(Alexandr87 @ 13.2.2005, 10:47)
cifraint=cifra;
при i=33
cifra 3.00000000
ciraint=2

А почему так? И как это исправить?

Автор: segmentation_fault 14.2.2005, 09:47
Смотрится вроде всё правильно. Видимо проблемы возникают при конверсии между double и int. Я бы вообще не стал с double возиться. Вот например как я бы решил эту задачку.
Код

#include <stdio.h>
#include <math.h>

main() {
int copiya, ostatok, i, n;
int delitsya;

printf("n: ");
scanf("%i",&n);
for(i=1;i<=n;++i)
{
copiya = i;
delitsya = 1;
if(i>=10)
{
 do
 {
ostatok = copiya%10;
if(!ostatok) delitsya = 0;
else
{
copiya = (copiya-ostatok)/10;
if(i%ostatok) delitsya = 0;
}
} while((delitsya)&&(copiya>=10));
if(i%copiya) delitsya = 0;
}
if(delitsya) printf("%i\n",i);
}
}

Автор: Tyrant 14.2.2005, 16:22
segmentation_fault вот спасибо!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)