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

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

15.05.2011, 11:28. Просмотров 3009. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.05.2011, 11:28
Ответы с готовыми решениями:

посоветуйте программу, которая бы пакетное прикручивание рамок фоткам делала
нужна программа, которая подготавливает фотки и картинки для вставки на сайт, автоматически...

Разработать программу, которая для заданного месяца, по закачанным файлам, делала отчет
Есть 10 список файлов актов за месяц. Задача. Разработать программу, которая для заданного...

Напишите программу,которая из файла F (f,g:file of integer)переписывает в пустой файл g сначала все положительные числа,а потом все отрицательные
Напишите программу,которая из файла F (f,g:file of integer)переписывает в пустой файл g сначала все...

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

15
Эксперт С++
4708 / 2533 / 753
Регистрация: 18.08.2009
Сообщений: 4,550
15.05.2011, 11:35 2
Цитата Сообщение от Temirlan90 Посмотреть сообщение
cin >> s;
if(s.length() == 1)
cout << 1 << " " << 0;
Кол-во преобразований понятно равно 0. А почему полученная цифра всегда в этом случае равна 1?
1
136 / 136 / 25
Регистрация: 30.09.2010
Сообщений: 333
15.05.2011, 11:36  [ТС] 3
valeriikozlov, а разве не так? Я просто думаю 100%
0
Higher
1944 / 1210 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
15.05.2011, 11:36 4
Вполне вмещает, у меня с чаровским массивом из 1000 элементов прошло
Хотя у вас лишнего много=)
0
136 / 136 / 25
Регистрация: 30.09.2010
Сообщений: 333
15.05.2011, 11:39  [ТС] 5
Хотя у вас лишнего много=)
diagon, что же делать)) зеленый еще Я=))
0
Эксперт С++
4708 / 2533 / 753
Регистрация: 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
136 / 136 / 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
Эксперт С++
4708 / 2533 / 753
Регистрация: 18.08.2009
Сообщений: 4,550
15.05.2011, 11:45 8
Temirlan90, 6-ое сообщение
0
136 / 136 / 25
Регистрация: 30.09.2010
Сообщений: 333
15.05.2011, 11:57  [ТС] 9
valeriikozlov, Я так и не могу догнать Вашу идею до конца...
при 12345
ответ ведь должен быть 6 2?
0
Эксперт С++
4708 / 2533 / 753
Регистрация: 18.08.2009
Сообщений: 4,550
15.05.2011, 12:00 10
Цитата Сообщение от Temirlan90 Посмотреть сообщение
при 12345
ответ ведь должен быть 6 2?
Да, так и есть.
0
136 / 136 / 25
Регистрация: 30.09.2010
Сообщений: 333
15.05.2011, 12:02  [ТС] 11
Тогда в чем прокол???
0
Эксперт С++
4708 / 2533 / 753
Регистрация: 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
136 / 136 / 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
Higher
1944 / 1210 / 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
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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.02.2014, 08:21

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Напишите программу, которая переворачивает все слова в строке
Добрый день. Проблема в том, что программа проходит успешно только 8 из 14 тестов - в остальных...

Напишите программу, которая выводит все последовательности длины N из 0 и 1
3. Напишите программу, которая выводит все последовательности длины N из 0 и 1.

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

Напишите программу, которая находит все числа Армстронга на отрезке [ a , b ]
Натуральное число называется числом Армстронга, если сумма цифр числа, возведенных в K -ю степень...


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

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

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