Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/10: Рейтинг темы: голосов - 10, средняя оценка - 4.60
Temirlan90
134 / 134 / 25
Регистрация: 30.09.2010
Сообщений: 333
1

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

15.05.2011, 11:28. Просмотров 1829. Ответов 15
Метки нет (Все метки)

Нумеролог
(Время: 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 тест, неужели стринг не вмещает число или дело в моем решении?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.05.2011, 11:28
Ответы с готовыми решениями:

Напишите программу, которая выводит все числа персвой сотни, оканчиающееся на 2
Всем привет, Напишите пожалуйста программу, которая выводит все числа первой...

Напишите программу, которая удаляет из слова X все буквы, которые встречаютьс в слове Z
Программа работает не правильно:( не могу понять как удалить буквы. ...

Напишите программу, которая выводит все простые числа, которые являются палиндромами
Напишите программу, которая выводит все простые числа, которые являются...

Напишите программу, которая вводит натуральное число n и находит все совершенные числа в диапазоне от 1 до n
Найдите, пожалуйста, ошибку!!! #include &lt;iostream&gt; using namespace std;...

Напишите программу, которая выводит на экран все слова, которые имеют определенный символ в определенной позиции
Здравствуйте. Препод сегодня задал решить задачу но это совсем не мой...

15
valeriikozlov
Эксперт С++
4686 / 2512 / 751
Регистрация: 18.08.2009
Сообщений: 4,550
15.05.2011, 11:35 2
Цитата Сообщение от Temirlan90 Посмотреть сообщение
cin >> s;
if(s.length() == 1)
cout << 1 << " " << 0;
Кол-во преобразований понятно равно 0. А почему полученная цифра всегда в этом случае равна 1?
1
Temirlan90
134 / 134 / 25
Регистрация: 30.09.2010
Сообщений: 333
15.05.2011, 11:36  [ТС] 3
valeriikozlov, а разве не так? Я просто думаю 100%
0
diagon
Higher
1937 / 1203 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
15.05.2011, 11:36 4
Вполне вмещает, у меня с чаровским массивом из 1000 элементов прошло
Хотя у вас лишнего много=)
0
Temirlan90
134 / 134 / 25
Регистрация: 30.09.2010
Сообщений: 333
15.05.2011, 11:39  [ТС] 5
Хотя у вас лишнего много=)
diagon, что же делать)) зеленый еще Я=))
0
valeriikozlov
Эксперт С++
4686 / 2512 / 751
Регистрация: 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
0
Temirlan90
134 / 134 / 25
Регистрация: 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 тест один фиг не проходит.
0
valeriikozlov
Эксперт С++
4686 / 2512 / 751
Регистрация: 18.08.2009
Сообщений: 4,550
15.05.2011, 11:45 8
Temirlan90, 6-ое сообщение
0
Temirlan90
134 / 134 / 25
Регистрация: 30.09.2010
Сообщений: 333
15.05.2011, 11:57  [ТС] 9
valeriikozlov, Я так и не могу догнать Вашу идею до конца...
при 12345
ответ ведь должен быть 6 2?
0
valeriikozlov
Эксперт С++
4686 / 2512 / 751
Регистрация: 18.08.2009
Сообщений: 4,550
15.05.2011, 12:00 10
Цитата Сообщение от Temirlan90 Посмотреть сообщение
при 12345
ответ ведь должен быть 6 2?
Да, так и есть.
0
Temirlan90
134 / 134 / 25
Регистрация: 30.09.2010
Сообщений: 333
15.05.2011, 12:02  [ТС] 11
Тогда в чем прокол???
0
valeriikozlov
Эксперт С++
4686 / 2512 / 751
Регистрация: 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++;
        }
1
Temirlan90
134 / 134 / 25
Регистрация: 30.09.2010
Сообщений: 333
15.05.2011, 12:16  [ТС] 13
valeriikozlov, ок спасибо Вам, буду сидеть и пытаться понять где Я прокосячил=)
0
easybudda
15.05.2011, 12:41
  #14

Не по теме:

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

1
diagon
Higher
1937 / 1203 / 120
Регистрация: 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); //и присваиваем строке полученное число
}
0
Live4Sky
6 / 1 / 0
Регистрация: 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) то работаем со строкой, а не выполняем преобразование как во втором цикле
0
19.02.2014, 08:21
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.02.2014, 08:21

Напишите программу с функцией, которая находит все автоморфные числа числа из промежутка от А до В
Найдите, пожалуйста, ошибки!!! #include &lt;iostream&gt; using namespace std; bool...

Даны два массива. Напишите программу, которая находит такую последовательность элементов максимальной длины, которая содержится и в первом, и во вт
Помогите написать программу.Даны два массива. Напишите программу, которая...

Напишите программу, которая выводит "YES", если все числа в последовательности одинаковые, и "NO" если это не так
На вход в первой строке подаётся натуральное число N (не более 10000). Далее,...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru