2015-09-18 3 views
-3

Это код, который я хочу найти.
Модель данных должна быть ...

Ex.1) Если я даю 91, он печатает 19. И Сравнить.
Если он не соответствует номеру ввода, он добавляет 91 и 19,
и выводит 110. И делайте это снова и снова.
Ex.2) Если я даю 2002, он печатает 2002.
Поскольку это число симметрии, оно соответствует номеру ввода. Таким образом, выпуск был бы в 2002 году.найти симметриюNumber для программирования c


Никакой массив или какие-либо другие передовые навыки. Моя домашняя задача - решить эту проблему с помощью базовой грамматики и переменных. Но я думаю, что у моей логики есть некоторые ошибки.


Когда я скомпилирую это, он просто идет по петлям, петлям, петлям
, но он отлично работает с одной цифрой. Я не знаю, почему ...


Надеюсь, вы, ребята, помогите мне, спасибо!

ULong Symmetrize (ULong number) { 
    ULong symmetryNumber = 0; 
    ULong temp; 
    ULong quotient; 
    ULong remainder; 

    do { 
     number = number + symmetryNumber; 
     temp = number; 
     while (temp = 0) { 
      quotient = temp/10; 
      remainder = temp%10; 
      symmetryNumber = (symmetryNumber * 10) + remainder; 
      temp = quotient; 
     } 
    } while (number != symmetryNumber); 

    return symmetryNumber; 
} 
+2

'='! = '=='. Назначение! = Равенство. – EOF

+0

Вы имеете в виду, что мне нужно отредактировать 'temp = 0' до 'temp == 0'? :) Да, это еще одна ошибка, спасибо! но это не сработает, а потом ..... – pk35551

+0

Если вы должны были выработать пример, вы бы быстро увидели проблемы (есть, как минимум, 3 основные проблемы, см. мой ответ ниже – user3629249

ответ

1

это одна из основных проблем, с кодом:

while (temp = 0) { 

который является задание.

Если бы вы написали его с буквальным слева, как:

while (0 = temp) { 

Тогда компилятор бы поймал ошибку. В любом случае сравнение должно быть:

while (temp == 0) { // < note the '==' rather than just '=' 

Предлагайте исправляя это заявление

второй основной проблемой отправленного кода эта строка:

} while (number != symmetryNumber); 

позволяет сказать «число» 25 то число s ... будет 52 и 25 НИКОГДА не будет равно 52, поэтому цикл продолжается навсегда.

Эта линия:

number = number + symmetryNumber; 

абсолютно бесполезно, поскольку значение + 0 по-прежнему значение. Предлагайте удалить это заявление

Внешнее do ... while утверждение не имеет никакого эффекта, кроме как сделать его бесконечным циклом. Предложите удалить внешний контур

+1

Возможно, правильно ответ, но я не согласен с предложением 'while (0 = temp) {' Это просто отменяет естественную логику.Хороший компилятор должен в любом случае предупреждать о таких вещах ('gcc' * * предупреждает, например, с соответствующими предупредительными флагами, такими как' -Wall'). –