Форум программистов, компьютерный форум CyberForum.ru

Напишите программу, которая бы делала все расчеты за нумеролога. - C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 5.00
Temirlan90
 Аватар для Temirlan90
131 / 131 / 8
Регистрация: 30.09.2010
Сообщений: 333
15.05.2011, 11:28     Напишите программу, которая бы делала все расчеты за нумеролога. #1
Нумеролог
(Время: 1 сек. Память: 16 Мб Сложность: 24%)

Чтобы предсказать судьбу человека, нумеролог берет время жизни человека в секундах, затем складывает все цифры этого числа. Если полученное число состоит более чем из одной цифры, операция повторяется, пока в числе не останется одна цифра. Затем по полученной цифре и числу операций, необходимых для преобразования числа в цифру нумеролог предсказывает судьбу человека. Нумеролог плохо умеет считать, а числа, с которыми он работает, могут быть очень большими. Напишите программу, которая бы делала все расчеты за него.
Входные данные

Входной файл INPUT.TXT содержит число N – время жизни человека в секундах (1 ≤ N ≤ 10^1000).
Выходные данные

В выходной файл OUTPUT.TXT выведите два числа через пробел: полученную цифру из числа N и число преобразований.
Примеры
Кликните здесь для просмотра всего текста
INPUT.TXT
1
OUTPUT.TXT
1 0

INPUT.TXT
10
OUTPUT.TXT
1 1

INPUT.TXT
99
OUTPUT.TXT
9 2

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
#include <string>
using namespace std;
int main() {
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
    string s;
    int sum = 0, count = 1;
    cin >> s;
    if(s.length() == 1) 
        cout << 1 << " " << 0;    
    else {
        for(int i = 0; i < s.length(); ++i) 
            sum += s[i] - '0';        
        while(sum > 9) {
            if(sum > 9) {
                sum = (sum % 10) + (sum / 10);
                count++;
            }
        }
        cout << sum << " " << count;
    }   
    return 0;
}
Проваливает 8 тест, неужели стринг не вмещает число или дело в моем решении?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.05.2011, 11:28     Напишите программу, которая бы делала все расчеты за нумеролога.
Посмотрите здесь:

C++ [C++] Напишите программу, которая выводит на экран...
C++ Напишите программу, которая выводит на экран все слова, которые имеют определенный символ в определенной позиции
Даны два массива. Напишите программу, которая находит такую последовательность элементов максимальной длины, которая содержится и в первом, и во вт C++
Напишите программу, которая выводит все числа персвой сотни, оканчиающееся на 2 C++
C++ Напишите программу, которая моделирует подбрасывание монеты
Напишите программу, которая удаляет из слова X все буквы, которые встречаютьс в слове Z C++
C++ Напишите программу, которая переводит гривны в $
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
15.05.2011, 11:35     Напишите программу, которая бы делала все расчеты за нумеролога. #2
Цитата Сообщение от Temirlan90 Посмотреть сообщение
cin >> s;
if(s.length() == 1)
cout << 1 << " " << 0;
Кол-во преобразований понятно равно 0. А почему полученная цифра всегда в этом случае равна 1?
Temirlan90
 Аватар для Temirlan90
131 / 131 / 8
Регистрация: 30.09.2010
Сообщений: 333
15.05.2011, 11:36  [ТС]     Напишите программу, которая бы делала все расчеты за нумеролога. #3
valeriikozlov, а разве не так? Я просто думаю 100%
diagon
Higher
 Аватар для diagon
1921 / 1187 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
15.05.2011, 11:36     Напишите программу, которая бы делала все расчеты за нумеролога. #4
Вполне вмещает, у меня с чаровским массивом из 1000 элементов прошло
Хотя у вас лишнего много=)
Temirlan90
 Аватар для Temirlan90
131 / 131 / 8
Регистрация: 30.09.2010
Сообщений: 333
15.05.2011, 11:39  [ТС]     Напишите программу, которая бы делала все расчеты за нумеролога. #5
Хотя у вас лишнего много=)
diagon, что же делать)) зеленый еще Я=))
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
15.05.2011, 11:40     Напишите программу, которая бы делала все расчеты за нумеролога. #6
И еще одно:

Цитата Сообщение от Temirlan90 Посмотреть сообщение
нумеролог берет время жизни человека в секундах, затем складывает все цифры этого числа. Если полученное число состоит более чем из одной цифры, операция повторяется,
значит операцией называется следущее:
например имеем число 12345
одна операция это - 1+2+3+4+5=15
Т.е одна операция это получение из 12345 числа 15.
А у Вас не так:

Цитата Сообщение от Temirlan90 Посмотреть сообщение
for(int i = 0; i < s.length(); ++i)
sum += s[i] - '0';
while(sum > 9) {
if(sum > 9) {
sum = (sum % 10) + (sum / 10);
count++;
}
Добавлено через 56 секунд
Temirlan90,
Например
INPUT.TXT
1
OUTPUT.TXT
1 0

INPUT.TXT
2
OUTPUT.TXT
2 0

INPUT.TXT
3
OUTPUT.TXT
3 0
Temirlan90
 Аватар для Temirlan90
131 / 131 / 8
Регистрация: 30.09.2010
Сообщений: 333
15.05.2011, 11:44  [ТС]     Напишите программу, которая бы делала все расчеты за нумеролога. #7
valeriikozlov, Я исправил как Вы и сказали
C++
1
2
if(s.length() == 1) 
                cout << 1 << " " << 0;
на
C++
1
2
if(s.length() == 1) 
                cout << s[0] << " " << 0;
но 8 тест один фиг не проходит.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
15.05.2011, 11:45     Напишите программу, которая бы делала все расчеты за нумеролога. #8
Temirlan90, 6-ое сообщение
Temirlan90
 Аватар для Temirlan90
131 / 131 / 8
Регистрация: 30.09.2010
Сообщений: 333
15.05.2011, 11:57  [ТС]     Напишите программу, которая бы делала все расчеты за нумеролога. #9
valeriikozlov, Я так и не могу догнать Вашу идею до конца...
при 12345
ответ ведь должен быть 6 2?
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
15.05.2011, 12:00     Напишите программу, которая бы делала все расчеты за нумеролога. #10
Цитата Сообщение от Temirlan90 Посмотреть сообщение
при 12345
ответ ведь должен быть 6 2?
Да, так и есть.
Temirlan90
 Аватар для Temirlan90
131 / 131 / 8
Регистрация: 30.09.2010
Сообщений: 333
15.05.2011, 12:02  [ТС]     Напишите программу, которая бы делала все расчеты за нумеролога. #11
Тогда в чем прокол???
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
15.05.2011, 12:08     Напишите программу, которая бы делала все расчеты за нумеролога. #12
Цитата Сообщение от Temirlan90 Посмотреть сообщение
while(sum > 9) {
if(sum > 9) {
sum = (sum % 10) + (sum / 10);
count++;
}
Вот здесь прокол. Для примера который я привел Ваш неправильный код дает правильный ответ (но для другого теста он даст неправильный результат).
В общем вот это:

Цитата Сообщение от Temirlan90 Посмотреть сообщение
while(sum > 9) {
if(sum > 9) {
sum = (sum % 10) + (sum / 10);
count++;
}
нужно заменить на:

C++
1
2
3
4
5
6
7
8
9
10
        while(sum > 9) {
            int tmp=0;
            while(sum>0)
            {
                tmp+=sum%10;
                sum/=10;
            }
            sum=tmp;
            count++;
        }
Temirlan90
 Аватар для Temirlan90
131 / 131 / 8
Регистрация: 30.09.2010
Сообщений: 333
15.05.2011, 12:16  [ТС]     Напишите программу, которая бы делала все расчеты за нумеролога. #13
valeriikozlov, ок спасибо Вам, буду сидеть и пытаться понять где Я прокосячил=)
easybudda
15.05.2011, 12:41
  #14

Не по теме:

Цитата Сообщение от Temirlan90 Посмотреть сообщение
N – время жизни человека в секундах (1 ≤ N ≤ 10^1000)
Десять в тысячной степени? Это чё за Дункан МакКлауд?

diagon
Higher
 Аватар для diagon
1921 / 1187 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
15.05.2011, 12:43     Напишите программу, которая бы делала все расчеты за нумеролога. #15
Тут дешевле чаровскими массивами пользоваться...
Если s-строка, а c-счетчик, равный нулю, то цикл будет примерно такой
C++
1
2
3
4
5
6
for (; strlen(s)>1 ;c++) { //пока размер строки больше 1 символа
        n=0;
        for (i=0; i < strlen(s);i++) //складываем все ее цифры
            n+=s[i]-48;
        itoa(n,s,10); //и присваиваем строке полученное число
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.02.2014, 08:21     Напишите программу, которая бы делала все расчеты за нумеролога.
Еще ссылки по теме:

Напишите программу, которая находит сумму ряда C++
C++ Напишите программу, которая вводит натуральное число n и находит все совершенные числа в диапазоне от 1 до n
Напишите программу с функцией, которая находит все автоморфные числа числа из промежутка от А до В C++
C++ Напишите программу, которая суммирует целые числа
C++ Напишите программу, которая выводит все простые числа, которые являются палиндромами

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Live4Sky
6 / 1 / 1
Регистрация: 04.10.2013
Сообщений: 42
19.02.2014, 08:21     Напишите программу, которая бы делала все расчеты за нумеролога. #16
Цитата Сообщение от Temirlan90 Посмотреть сообщение
valeriikozlov, Я исправил как Вы и сказали
C++
1
2
if(s.length() == 1) 
                cout << 1 << " " << 0;
на
C++
1
2
if(s.length() == 1) 
                cout << s[0] << " " << 0;
но 8 тест один фиг не проходит.
почему if(s.length() == 1) то работаем со строкой, а не выполняем преобразование как во втором цикле
Yandex
Объявления
19.02.2014, 08:21     Напишите программу, которая бы делала все расчеты за нумеролога.
Ответ Создать тему
Опции темы

Текущее время: 13:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru