392 / 284 / 53
Регистрация: 26.12.2009
Сообщений: 874
1

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

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

Дано натуральное число. От этого числа отнимем суму его цыфр. От нового числа опять отнимем суму его цыфр. Так будем делать до тех пор, пока новое число больше нуля. Сколько раз будем выполнять даную операцию?
О_о
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.11.2010, 19:24
Ответы с готовыми решениями:

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

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

Преобразование символов в числа
Дан текст, содержащий целые числа. Вывести на экран сумму нечетных чисел. Ребят помогите...

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

17
Эксперт С++
5052 / 3113 / 271
Регистрация: 11.11.2009
Сообщений: 7,045
14.11.2010, 19:36 2
Эмм.... Вы же сами написали. Пока новое число больше нуля. В цикле. Отняли, проверили, отняли, проверили...
0
392 / 284 / 53
Регистрация: 26.12.2009
Сообщений: 874
15.11.2010, 17:31  [ТС] 3
Цитата Сообщение от silent_1991 Посмотреть сообщение
Отняли, проверили, отняли, проверили...
да, это понятно, но как найти суму цыфр числа типа лонг?
1
32 / 32 / 7
Регистрация: 10.10.2010
Сообщений: 89
15.11.2010, 17:37 4
Цитата Сообщение от Mayonez Посмотреть сообщение
да, это понятно, но как найти суму цыфр числа типа лонг?
мне кажется так же, ибо long по моему это тот же самый int (тоесть целочисленный) разница только в размере самой переменной если не ошибаюсь. Проблем мне кажется будет больше с double, где не целые величины.
2
392 / 284 / 53
Регистрация: 26.12.2009
Сообщений: 874
15.11.2010, 17:46  [ТС] 5
Tambel, вы меня не совсем поняли. Вот пример: есть число 142165235. Мне нужно найти сумму его цыфр (тоесть 29). Как это сделать?
C++
1
2
int chislo = 142165235;
int sum = 29 //-----> ????
1
В астрале
Эксперт С++
8045 / 4802 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
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
392 / 284 / 53
Регистрация: 26.12.2009
Сообщений: 874
15.11.2010, 17:50  [ТС] 7
а если число типа дабл?

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

Да и 2 миллиарда должны умещаться в инт. Ну на крайний случай в unsigned int... Хотя все зависит от компа...
0
Maniac
Эксперт С++
1462 / 963 / 160
Регистрация: 02.01.2009
Сообщений: 2,817
Записей в блоге: 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
Эксперт С++
5052 / 3113 / 271
Регистрация: 11.11.2009
Сообщений: 7,045
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
32 / 32 / 7
Регистрация: 10.10.2010
Сообщений: 89
15.11.2010, 18:03 13
Цитата Сообщение от Mayonez Посмотреть сообщение
а если число типа дабл?
нужно сначала например из числа 123.456 сделать 123456, а потом уже поменяв его на int или long считать вышесказанным методом. Если из 123.456 сразу сделать int по мы потеряем все что стоит после точки тем самым получим неправильный результат.
1
392 / 284 / 53
Регистрация: 26.12.2009
Сообщений: 874
15.11.2010, 18:12  [ТС] 14
Цитата Сообщение от silent_1991 Посмотреть сообщение
А можно вообще вот так:
так мы находим сумму только один раз. а как это переделать до условия задачи?
0
Maniac
Эксперт С++
1462 / 963 / 160
Регистрация: 02.01.2009
Сообщений: 2,817
Записей в блоге: 1
15.11.2010, 18:13 15
silent_1991, Задача не решена. ты только суму считаешь..
0
Эксперт С++
5052 / 3113 / 271
Регистрация: 11.11.2009
Сообщений: 7,045
15.11.2010, 18:22 16
ISergey, я в курсе. Тут пошли вопросы, как посчитать сумму длинного числа. Я показал.

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

Добавлено через 22 секунды
Тогда да, надо через остатки от деления и прочее делать.
0
392 / 284 / 53
Регистрация: 26.12.2009
Сообщений: 874
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
Maniac
Эксперт С++
1462 / 963 / 160
Регистрация: 02.01.2009
Сообщений: 2,817
Записей в блоге: 1
15.11.2010, 21:42 18
Цитата Сообщение от Mayonez Посмотреть сообщение
Это из-за вызова функции у меня?
Да. Выключи режим отладки и сделай функцию inline, тогда будет быстрее.

Ну или если компилятор не захочет делать ее встраиваемой, то можно указать конвенцию вызова __fastcall , тогда параметр будет в функцию передаваться через регистр, а не стек..
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.11.2010, 21:42
Помогаю со студенческими работами здесь

Преобразование строк в числа
Всем привет. никак не могу решить задачку, преобразовать на выводе строки в цифры. Пример на ввод...

Преобразование числа в строку
Всем привет. Имеется следующая функция void LiquidCrystal_I2C_PrintString(char *str){ uint8_t...

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

Преобразование числа в строку
Как преобразовать строку char *s, в которой записано число(возможно со знаком минус), в формат типа...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru