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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 5.00
Temirlan90
132 / 132 / 8
Регистрация: 30.09.2010
Сообщений: 333
#1

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

15.05.2011, 11:28. Просмотров 1679. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Напишите программу, которая бы делала все расчеты за нумеролога. (C++):

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

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

Напишите программу, которая удаляет из слова X все буквы, которые встречаютьс в слове Z - C++
Программа работает не правильно:( не могу понять как удалить буквы. #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;iostream&gt; ...

Напишите программу, которая вводит натуральное число n и находит все совершенные числа в диапазоне от 1 до n - C++
Найдите, пожалуйста, ошибку!!! #include &lt;iostream&gt; using namespace std; int main() { int i,n,b,a; cout &lt;&lt; &quot;Vvedite...

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

Напишите программу с функцией, которая находит все автоморфные числа числа из промежутка от А до В - C++
Найдите, пожалуйста, ошибки!!! #include &lt;iostream&gt; using namespace std; bool Avtomorf (int n) { long int m; bool f; m=n*n; ...

15
valeriikozlov
Эксперт С++
4670 / 2496 / 321
Регистрация: 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
132 / 132 / 8
Регистрация: 30.09.2010
Сообщений: 333
15.05.2011, 11:36  [ТС] #3
valeriikozlov, а разве не так? Я просто думаю 100%
0
diagon
Higher
1929 / 1195 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
15.05.2011, 11:36 #4
Вполне вмещает, у меня с чаровским массивом из 1000 элементов прошло
Хотя у вас лишнего много=)
0
Temirlan90
132 / 132 / 8
Регистрация: 30.09.2010
Сообщений: 333
15.05.2011, 11:39  [ТС] #5
Хотя у вас лишнего много=)
diagon, что же делать)) зеленый еще Я=))
0
valeriikozlov
Эксперт С++
4670 / 2496 / 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
0
Temirlan90
132 / 132 / 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 тест один фиг не проходит.
0
valeriikozlov
Эксперт С++
4670 / 2496 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
15.05.2011, 11:45 #8
Temirlan90, 6-ое сообщение
0
Temirlan90
132 / 132 / 8
Регистрация: 30.09.2010
Сообщений: 333
15.05.2011, 11:57  [ТС] #9
valeriikozlov, Я так и не могу догнать Вашу идею до конца...
при 12345
ответ ведь должен быть 6 2?
0
valeriikozlov
Эксперт С++
4670 / 2496 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
15.05.2011, 12:00 #10
Цитата Сообщение от Temirlan90 Посмотреть сообщение
при 12345
ответ ведь должен быть 6 2?
Да, так и есть.
0
Temirlan90
132 / 132 / 8
Регистрация: 30.09.2010
Сообщений: 333
15.05.2011, 12:02  [ТС] #11
Тогда в чем прокол???
0
valeriikozlov
Эксперт С++
4670 / 2496 / 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++;
        }
1
Temirlan90
132 / 132 / 8
Регистрация: 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)
Десять в тысячной степени? Это чё за Дункан МакКлауд?

1
diagon
Higher
1929 / 1195 / 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); //и присваиваем строке полученное число
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.05.2011, 12:43
Привет! Вот еще темы с ответами:

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

Напишите программу, которая переводит гривны в $ - C++
напишите программу, которая переводит гривны в $, DM c комментариями?

[C++] Напишите программу, которая выводит на экран... - C++
Напишите программу, которая выводит на экран вводимые символы до тех пор, пока не введено &lt;CTRL/Z&gt;, выводит количество введенных символов,...

2. Напишите программу, которая запрашивает координаты точки (x, y) - C++
Решите если кто-то сможет.Буду благодарен!


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

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
15.05.2011, 12:43
Ответ Создать тему
Опции темы

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