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

Вытаскиваем из числа цифры - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Теория по динамической памяти http://www.cyberforum.ru/cpp-beginners/thread729925.html
Предположим, применяется оператор new в форме для массива: p=new int ;. n ведь может быть и большим. Может n==1000000? Где запоминается, сколько выделено памяти и откуда система знает, сколько надо освободить памяти по delete p;? Ведь там то я n не указываю. Может надо освободить сразу много страниц? Освобождаются все страницы, расположенные подряд? Эйси. А если я сначала выделили две страницы,...
C++ Деление длинного числа на длинное Всем привет! Решил написать длинную арифметику в самом ее классическом варианте, когда все операции производятся школьным столбиком. Но вот незадача: я использую основание системы счисления 10^9 (миллиард), т.е. каждая цифра моего большого числа от 0 до 999999999. При написании алгоритма деления длинного числа на длинное возникла проблема: поскольку делить на длинное число мы не умеем, то в... http://www.cyberforum.ru/cpp-beginners/thread729919.html
присвоить стрке двумерного масива значение C++
у меня есть масив - mas; и вот кусок кода где надо присвоить второй строке масива значение 5.. вроде правильно написал не понимаю почему не работает.... for(i=1; i<2; i++) { for(j=0; j<5; j++) mas=5; } а ето для вывода уже измененого масива:
c++ перегрузка функций и еще пара просьб C++
Доброй ночи! вот имеется код с классом объектом которого является комплексное число. класс нужно дополнить динамическим массивом, например, названием комплексного числа(такое уж дурацкое задание) и перегруженными функциями сравнения и преобразования числа в вещественное. Помогите пожалуйста, буду очень благодарен! просто очень срочно нужно #include "stdafx.h" #include <iostream> #include...
C++ Фиксированный квант времени в алгоритме планирования FCFS http://www.cyberforum.ru/cpp-beginners/thread729909.html
Здравствуйте. Вот код программы, планировщика, который работает по алгоритму FCFS. В нем реализованы два состояния: готовность и выполнение. Как дополнить код, чтоб было состояние ОЖИДАНИЯ и использовался КВАНТ ВРЕМЕНИ???? #include "stdafx.h" #include "conio.h" #include "iostream" #include "stdlib.h" #include "locale.h" using namespace std; void main()
C++ Создать класс файл с методом top50 по расширению Создать класс File. Добавить метод, который считает сколько файлов на определённом диске. Создать метод Competition. Он показывает файлов какого типа больше всего, а также их кол-во. Метод Top50. Распечатывает таблицу наиболее популярных расширений. Помогите пожалуйста сделать это или какую-то часть. Буду очень благодарен. подробнее

Показать сообщение отдельно
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619

Вытаскиваем из числа цифры - C++

13.12.2012, 09:01. Просмотров 364. Ответов 0
Метки (Все метки)

Правильно:
C++
1
2
3
4
5
6
7
8
9
void f(int x)
{
 int d;
 do
 {
  d=x%10; // Получаем последнюю цифру
  x/=10; // Избавляемся от неё
 } while (x!=0);
};
, например,
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
29
30
31
char *str(int x)
{
 int b;
 int L;
 char *result;
 char *p;
 b=abs(x);
 L=0;
 do
 {
  ++L;
 } while (b!=0);
 if (x<0)
 {
  ++L;
 }
 result=new char [L];
 if (x<0)
 {
  *result='-';
 }
 p=result+L-1;
 b=abs(x);
 do
 {
  d=b%10;
  *p=d+'0';
  b/=10;
  --p;
 } while (x!=0);
}
. На первый взгляд очень избыточно:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void f(int x)
{
 int d;
 int w;
 int b;
 w=1;
 b=x;
 //Определяем вес старшей цифры
 while while ((x/10)!=0)
 {
  b/=10;
  w*10;
 }
 b=x;
 while while ((x/10)!=0)
 {
  d=b/w;//получаем первую цифру
  b=b-d*w;//Избавляемся от неё
  w/=10;// Получаем вес следующей цифры
 }
};
. Но реально всё равно придётся прогнать оба цикла. Например,
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
29
30
31
32
33
34
35
36
37
char *str(int x)
{
 int d;
 int w;
 int b;
 int L;
 char *p;
 char *result;
 w=1;
 L=1;
 b=abs(x);
 //Определяем вес старшей цифры
 while while ((x/10)!=0)
 {
  b/=10;
  w*10;
  ++L;
 }
 b=abs(x);
 if (x<0)
 {
  ++L;
 }
 result=new char [L];
 if (x<0)
 {
  *result='-';
 }
 p=result+L-1;
 while while ((x/10)!=0)
 {
  d=b/w;//получаем первую цифру
  *p=d+'0';
  b=b-d*w;//Избавляемся от неё
  w/=10;// Получаем вес следующей цифры
 }
};
. Данный подход избыточен, но не в той мере, как кажется: найти только логарифм числа можно быстрее, чем и логарифм, и основание в степени разности логарифма и единицы, да и в основном цикле будет меньше операций. Исключение: если нужна всего лишь сумма цифр, их произведение, среднее арифметическое цифр, или ещё что нибудь такое, где количество цифр заранее знать не нужно. Тогда избыточность в полной мере соответствует тому, что видно при поверхностном сравнении функций
C++
1
void f();
.
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru