2016-07-14 3 views
-3

Постановка задачи:программа C падает во время выполнения

Когда число 64253 умножается на 365 продукт 23452345. Обратите внимание, что первые четыре цифры совпадают с четырьмя четырьмя цифрами (2345 и 2345). Напишите программу, которая будет найти целые числа, которые могут быть умножены на 365 для получения восьмизначного продукта, где первые четыре цифры совпадают с четырьмя четырьмя цифрами. В приведенном выше примере цифры не повторялись, но в вашей программе продукт может иметь повторение . Например, 44 884 488. (Подсказка: Используйте моды)

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

#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 

int a=10000, b,c; 
// 64253 
while(a<100000){ 

    b = a*365; 
    c = (a*365)%10000; 

    if(c == 0 || b %1000 == c) 
     continue; 

    if(b/c == 10001){ 
     printf("%d \n",a); 
    } 

    ++a; 
} 


return 0; 
} 

Я понятия не имею, почему это происходит сбой. Можете ли вы помочь друзьям?

+3

Куда он падает и что сообщение об ошибке? – SurvivalMachine

+0

Я не вижу причин, по которым он должен потерпеть крах (нет переполнения, если int 32 бит), но я сомневаюсь, что вы получите правильные результаты. –

+0

Он говорит, что процесс возвратил 255 (0XFF). –

ответ

6

(10000*365) % 10000 0.

Так вы деля: b/0 что приводит к Exception вычислений с плавающей точкой.

РЕДАКТИРОВАТЬ: Обратите внимание, что этот ответ до редактирования OP, до того, как в код примера была введена проверка c == 0.

3

Когда c равно нулю, вы пытаетесь разделить на ноль.

1

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

if(b/10000000<0 || b/10000000>9)continue; 

Для оптимизации кода. (Таким образом, вы удаляете все цифры не 8 цифр).

Смежные вопросы