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

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

Восстановить пароль Регистрация
 
Mayonez
 Аватар для Mayonez
379 / 271 / 20
Регистрация: 26.12.2009
Сообщений: 875
14.11.2010, 19:24     Преобразование числа #1
Дано натуральное число. От этого числа отнимем суму его цыфр. От нового числа опять отнимем суму его цыфр. Так будем делать до тех пор, пока новое число больше нуля. Сколько раз будем выполнять даную операцию?
О_о
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
14.11.2010, 19:36     Преобразование числа #2
Эмм.... Вы же сами написали. Пока новое число больше нуля. В цикле. Отняли, проверили, отняли, проверили...
Mayonez
 Аватар для Mayonez
379 / 271 / 20
Регистрация: 26.12.2009
Сообщений: 875
15.11.2010, 17:31  [ТС]     Преобразование числа #3
Цитата Сообщение от silent_1991 Посмотреть сообщение
Отняли, проверили, отняли, проверили...
да, это понятно, но как найти суму цыфр числа типа лонг?
Tambel
32 / 32 / 2
Регистрация: 10.10.2010
Сообщений: 89
15.11.2010, 17:37     Преобразование числа #4
Цитата Сообщение от Mayonez Посмотреть сообщение
да, это понятно, но как найти суму цыфр числа типа лонг?
мне кажется так же, ибо long по моему это тот же самый int (тоесть целочисленный) разница только в размере самой переменной если не ошибаюсь. Проблем мне кажется будет больше с double, где не целые величины.
Mayonez
 Аватар для Mayonez
379 / 271 / 20
Регистрация: 26.12.2009
Сообщений: 875
15.11.2010, 17:46  [ТС]     Преобразование числа #5
Tambel, вы меня не совсем поняли. Вот пример: есть число 142165235. Мне нужно найти сумму его цыфр (тоесть 29). Как это сделать?
C++
1
2
int chislo = 142165235;
int sum = 29 //-----> ????
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 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';
Mayonez
 Аватар для Mayonez
379 / 271 / 20
Регистрация: 26.12.2009
Сообщений: 875
15.11.2010, 17:50  [ТС]     Преобразование числа #7
а если число типа дабл?

Добавлено через 44 секунды
Цитата Сообщение от ForEveR Посмотреть сообщение
О елки палки
...
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
15.11.2010, 17:51     Преобразование числа #8
Mayonez, Тут другое дело.
Какая будет сумма цифр у числа 1234.1234?
Mayonez
 Аватар для Mayonez
379 / 271 / 20
Регистрация: 26.12.2009
Сообщений: 875
15.11.2010, 17:55  [ТС]     Преобразование числа #9
Добавлено через 3 минуты
Цитата Сообщение от ForEveR Посмотреть сообщение
Какая будет сумма цифр у числа 1234.1234?
я понял, у меня число целое (просто 2.000.000.000 не помещается в инт) и поетому в дабле
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
15.11.2010, 17:57     Преобразование числа #10
Mayonez, long int в помощь. unsigned long int. unsigned long long. Но не double. В doubl-е все не так просто, ибо с double нельзя применять операцию нахождения остатка...

Да и 2 миллиарда должны умещаться в инт. Ну на крайний случай в unsigned int... Хотя все зависит от компа...
ISergey
Maniac
Эксперт С++
 Аватар для ISergey
1330 / 863 / 50
Регистрация: 02.01.2009
Сообщений: 2,622
Записей в блоге: 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
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 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;
}
Tambel
32 / 32 / 2
Регистрация: 10.10.2010
Сообщений: 89
15.11.2010, 18:03     Преобразование числа #13
Цитата Сообщение от Mayonez Посмотреть сообщение
а если число типа дабл?
нужно сначала например из числа 123.456 сделать 123456, а потом уже поменяв его на int или long считать вышесказанным методом. Если из 123.456 сразу сделать int по мы потеряем все что стоит после точки тем самым получим неправильный результат.
Mayonez
 Аватар для Mayonez
379 / 271 / 20
Регистрация: 26.12.2009
Сообщений: 875
15.11.2010, 18:12  [ТС]     Преобразование числа #14
Цитата Сообщение от silent_1991 Посмотреть сообщение
А можно вообще вот так:
так мы находим сумму только один раз. а как это переделать до условия задачи?
ISergey
Maniac
Эксперт С++
 Аватар для ISergey
1330 / 863 / 50
Регистрация: 02.01.2009
Сообщений: 2,622
Записей в блоге: 1
15.11.2010, 18:13     Преобразование числа #15
silent_1991, Задача не решена. ты только суму считаешь..
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
15.11.2010, 18:22     Преобразование числа #16
ISergey, я в курсе. Тут пошли вопросы, как посчитать сумму длинного числа. Я показал.

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

Добавлено через 22 секунды
Тогда да, надо через остатки от деления и прочее делать.
Mayonez
 Аватар для Mayonez
379 / 271 / 20
Регистрация: 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 укладывается. Это из-за вызова функции у меня?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.11.2010, 21:42     Преобразование числа
Еще ссылки по теме:

преобразование символов в числа C++
Преобразование символов в числа C++
Преобразование в числа C++

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

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

Ну или если компилятор не захочет делать ее встраиваемой, то можно указать конвенцию вызова __fastcall , тогда параметр будет в функцию передаваться через регистр, а не стек..
Yandex
Объявления
15.11.2010, 21:42     Преобразование числа
Ответ Создать тему
Опции темы

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