Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
Mayonez
382 / 274 / 53
Регистрация: 26.12.2009
Сообщений: 875
1

Преобразование числа

14.11.2010, 19:24. Просмотров 944. Ответов 17
Метки нет (Все метки)

Дано натуральное число. От этого числа отнимем суму его цыфр. От нового числа опять отнимем суму его цыфр. Так будем делать до тех пор, пока новое число больше нуля. Сколько раз будем выполнять даную операцию?
О_о
1
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.11.2010, 19:24
Ответы с готовыми решениями:

Преобразование в числа
Добрый день! Подскажите пожалуйста, как можно сделать.. В функцию передается...

Преобразование числа в строку
Всем доброго времени суток, помогите пожалуйста получить из числа 12345679...

Преобразование символов в числа
Дан текст, имеющий вид: dl + d2 + ... + dn, где di — цифры. Вычислить...

Итерационное преобразование числа
На вход программе подается целое положительное число n. Если оно четное, делим...

Преобразование символов в числа
Дан текст. Определить, является ли он правильной десятичной записью целого...

17
silent_1991
Эксперт С++
5011 / 3071 / 271
Регистрация: 11.11.2009
Сообщений: 7,045
Завершенные тесты: 1
14.11.2010, 19:36 2
Эмм.... Вы же сами написали. Пока новое число больше нуля. В цикле. Отняли, проверили, отняли, проверили...
0
Mayonez
382 / 274 / 53
Регистрация: 26.12.2009
Сообщений: 875
15.11.2010, 17:31  [ТС] 3
Цитата Сообщение от silent_1991 Посмотреть сообщение
Отняли, проверили, отняли, проверили...
да, это понятно, но как найти суму цыфр числа типа лонг?
1
Tambel
32 / 32 / 7
Регистрация: 10.10.2010
Сообщений: 89
15.11.2010, 17:37 4
Цитата Сообщение от Mayonez Посмотреть сообщение
да, это понятно, но как найти суму цыфр числа типа лонг?
мне кажется так же, ибо long по моему это тот же самый int (тоесть целочисленный) разница только в размере самой переменной если не ошибаюсь. Проблем мне кажется будет больше с double, где не целые величины.
2
Mayonez
382 / 274 / 53
Регистрация: 26.12.2009
Сообщений: 875
15.11.2010, 17:46  [ТС] 5
Tambel, вы меня не совсем поняли. Вот пример: есть число 142165235. Мне нужно найти сумму его цыфр (тоесть 29). Как это сделать?
C++
1
2
int chislo = 142165235;
int sum = 29 //-----> ????
1
ForEveR
В астрале
Эксперт С++
7997 / 4755 / 652
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
15.11.2010, 17:48 6
Mayonez, О елки палки.
C++
1
2
3
4
5
6
while(a)
{
   sum+=a%10;
   a/=10;
}
std::cout<<sum<<'\n';
1
Mayonez
382 / 274 / 53
Регистрация: 26.12.2009
Сообщений: 875
15.11.2010, 17:50  [ТС] 7
а если число типа дабл?

Добавлено через 44 секунды
Цитата Сообщение от ForEveR Посмотреть сообщение
О елки палки
...
1
ForEveR
В астрале
Эксперт С++
7997 / 4755 / 652
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
15.11.2010, 17:51 8
Mayonez, Тут другое дело.
Какая будет сумма цифр у числа 1234.1234?
0
Mayonez
382 / 274 / 53
Регистрация: 26.12.2009
Сообщений: 875
15.11.2010, 17:55  [ТС] 9
Добавлено через 3 минуты
Цитата Сообщение от ForEveR Посмотреть сообщение
Какая будет сумма цифр у числа 1234.1234?
я понял, у меня число целое (просто 2.000.000.000 не помещается в инт) и поетому в дабле
1
ForEveR
В астрале
Эксперт С++
7997 / 4755 / 652
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
15.11.2010, 17:57 10
Mayonez, long int в помощь. unsigned long int. unsigned long long. Но не double. В doubl-е все не так просто, ибо с double нельзя применять операцию нахождения остатка...

Да и 2 миллиарда должны умещаться в инт. Ну на крайний случай в unsigned int... Хотя все зависит от компа...
0
ISergey
Maniac
Эксперт С++
1413 / 923 / 149
Регистрация: 02.01.2009
Сообщений: 2,754
Записей в блоге: 1
15.11.2010, 17:58 11
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
25
26
27
#include <iostream>
 
int main(){
 
    int new_n = 300;
    int count = 0;
 
    std::cout << "Start number: " << new_n << '\n';
    while(new_n)
    {
        int buff = 0, n = new_n;
        while(n)    
        {
            buff += n % 10;
            n /= 10;        
        }
 
        new_n -= buff;
        ++count;
 
        std::cout << "  New_n: " << new_n << "\tCount: " << count << '\n';
    }
 
    std::cout << "Result Count: " << count << '\n';
 
    return 0;
}
http://codepad.org/gpuwn6fG
1
silent_1991
Эксперт С++
5011 / 3071 / 271
Регистрация: 11.11.2009
Сообщений: 7,045
Завершенные тесты: 1
15.11.2010, 18:03 12
А можно вообще вот так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
 
int main()
{
    int sum = 0;
 
    std::cout << "Enter number: ";
 
    while (true)
    {
        char c = std::cin.get();
 
        if (c >= '0' && c <= '9')
            sum += c - '0';
        else
            break;
    }
 
    std::cout << "Sum = " << sum;
 
    std::cin.get();
    return 0;
}
1
Tambel
32 / 32 / 7
Регистрация: 10.10.2010
Сообщений: 89
15.11.2010, 18:03 13
Цитата Сообщение от Mayonez Посмотреть сообщение
а если число типа дабл?
нужно сначала например из числа 123.456 сделать 123456, а потом уже поменяв его на int или long считать вышесказанным методом. Если из 123.456 сразу сделать int по мы потеряем все что стоит после точки тем самым получим неправильный результат.
1
Mayonez
382 / 274 / 53
Регистрация: 26.12.2009
Сообщений: 875
15.11.2010, 18:12  [ТС] 14
Цитата Сообщение от silent_1991 Посмотреть сообщение
А можно вообще вот так:
так мы находим сумму только один раз. а как это переделать до условия задачи?
0
ISergey
Maniac
Эксперт С++
1413 / 923 / 149
Регистрация: 02.01.2009
Сообщений: 2,754
Записей в блоге: 1
15.11.2010, 18:13 15
silent_1991, Задача не решена. ты только суму считаешь..
0
silent_1991
Эксперт С++
5011 / 3071 / 271
Регистрация: 11.11.2009
Сообщений: 7,045
Завершенные тесты: 1
15.11.2010, 18:22 16
ISergey, я в курсе. Тут пошли вопросы, как посчитать сумму длинного числа. Я показал.

Добавлено через 1 минуту
А, ну хотя да, под условие не подделать... Я просто условие уже забыл, перечитывать не стал, а первое, что прочитал, это "как посчитать сумму"...

Добавлено через 22 секунды
Тогда да, надо через остатки от деления и прочее делать.
0
Mayonez
382 / 274 / 53
Регистрация: 26.12.2009
Сообщений: 875
15.11.2010, 18:48  [ТС] 17
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
25
26
27
28
#include <iostream>
using namespace std;
 
int sum(int a)
{
   int sum = 0;
   while(a)
   {
   sum += a%10;
   a /= 10;
   }
   return sum;
}
 
int main()
{
   int a; 
   cin >> a;
   int k = 0;
   while (a)
   {
      a -= sum(a);
      k++;
   }
   cout << k << endl;
   system("pause");
   return 0;
}
ну вот

Добавлено через 26 секунд
вроде так

Добавлено через 8 минут
ограничение по времени - 10 секунд
не укладываюсь
что посоветуете?

Добавлено через 5 минут
а пример ISergey укладывается. Это из-за вызова функции у меня?
0
ISergey
Maniac
Эксперт С++
1413 / 923 / 149
Регистрация: 02.01.2009
Сообщений: 2,754
Записей в блоге: 1
15.11.2010, 21:42 18
Цитата Сообщение от Mayonez Посмотреть сообщение
Это из-за вызова функции у меня?
Да. Выключи режим отладки и сделай функцию inline, тогда будет быстрее.

Ну или если компилятор не захочет делать ее встраиваемой, то можно указать конвенцию вызова __fastcall , тогда параметр будет в функцию передаваться через регистр, а не стек..
1
15.11.2010, 21:42
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.11.2010, 21:42

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

Преобразование числа в символ.
Здравствуйте, пишу программу перевода числа из Р-ичной системы счисления в...

Преобразование слов в числа
Как сделать программу, когда вводишь слово &quot;два&quot;, программа должна...


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

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

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