![]() |
Решение проблем в программировании
Код:
#include <stdio.h><<point.t = a[maxn];>> вылетает <<error C2143: синтаксическая ошибка: отсутствие ";" перед ".">> причём, 2 раза. |
point - это тип. Создай переменную данного типа и ей присваивай значение.
|
тьфу, внатуре :)) Засиделся слишком за компом :))
|
Помогите плз с задачей. Не могу понять почему стопится выполение :(
Задача
Натуральное число называется палиндромом, если оно читается одинаково с обеих сторон, например, 171. Возьмём любое число. Если оно не палиндром, то перевернем его и сложим с исходным. Если не получится палиндром, то проделаем с ним то же и т.д. пока не получится палиндром. Для всех чисел от 100 до 200 найти, через сколько шагов получится палиндром и какой. Что получилось у меня
Код:
# include<iostream>Выводит до 161, 162 уже почему-то не пишет
Код:
100 101 kol_shagov - 1 |
подозреваю, что в 46 строке
Код:
sum=ch+pere(sum);Код:
sum=sum+pere(sum);162+261=423 . 423 - не палиндром. Дальше производим операцию над числом 423 423+324=747 747 - палиндром. У вас же первое слагаемое всё время исходное число 162. |
Цитата:
Цитата:
zhekas, ты пробовал откомпилить и запустить? У меня на g++ 4.4.5 стопится. И на винде в VS 6.0 (синтаксис изменялся само-собой) тоже стопится. |
В таком случае данная процедура теряет смысл как алгоритм сведения числа к палиндрому.
А программа не стопится а зацикливается, т.е. не может выйти из цикла, поскольку не находит такого числа. |
zhekas, угу. Сделал sum+=pere(sum) и пришлось ещё все int заменить на unsigned int, а то некоторые числа уж больно здоровые)
Спасибо |
Боюсь, что они длиннее чем вы думаете. И замена даже на long их не спасает. Хотя вру. у меня просто int и long -это один и тот же тип.
Хотя sum вполне может перескакивать через максимальное значение, И получится не правильный ответ. |
zhekas, unsigned int же. Когда ставил long или просто int, то ответ получался не палиндром, да ещё и минусовой.
|
За счет того что unsigned всегда положительный вы могли и не заметить перехода за максимальное значение.
Более того с помощью отладчика gdb можно заметить, что для ch=196 при i=30 sum меняется с sum=3121672202 на sum=849466119 То есть sum уменьшилась. А этого не может быть sum может только возрастать. Значит sum перескочило через максимальное значение |
zhekas, оО так это и проверку толком то не сделать чтоли?
|
В принципе, тут надо работать не с числами а с массивом разрядов (тем более вы и так сначала преобразуете число в массив разрядов, а потом обратно). От этого массива требуется только операция сложения, что достаточно просто.
Число 196 После 48150 шагов так и не преобразовалось в палиндром. sum имеет 20000 знаков, С остальными числами всё в порядке. Числа 177 и 187 обрели свои настоящие палиндромы. Добавлено через 1 час 10 минут Код:
# include<iostream> |
zhekas, для переворота использую другой вариант, в 2-е строки без массивов. Да и задача уже "отвалилась", не надо вообщем.
За помощь спасибо! |
Подскажите, можно ли в с++ ввести команду, чтобы по заданной директории открывался файл?
|
| Текущее время: 06:18. Часовой пояс GMT +3. |
Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot