[an error occurred while processing this directive]
Увидел у себя ошибку. Надо, чтобы было так (+)
(«Телесистемы»: Конференция «Цифровые сигнальные процессоры (DSP) и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено homekvn 09 февраля 2006 г. 13:59
В ответ на: Ответ: отправлено <font color=gray>TImattU</font> 09 февраля 2006 г. 12:42

Пусть исходное число хранится в переменной R0.

Делаем следующее:


Делаем двумерный массив из 40 элементов (заметим, что он уже не упорядоченный, т.к. добавил нули):
int M [4][10] = {9000, 8000, 7000, ..., 1000, 0, 900, 800, ..., 100, 0, 90, 80, ..., 10, 0, 9, 8, ..., 1, 0}

int *M_ptr = M; //адрес первого элемента массива M
int *M_Digits_ptr_basic = &M[4][0]; //адрес ряда, где находятся цифры
int *M_Digits_ptr; //вспомогательный указатель на ряд цифр.
//При помощи него будем бежать по ряду


A=R0;

dec_digit_index = 0;
do {
//восстанавливаем указатель на ряд цифр
M_Digits_ptr = M_Digits_ptr_basic;

//ищем наибольшее число в массиве, которое не превосходит А
while (A>*M_ptr)
{
M_Digits_ptr++;
M_ptr++;
}

//вычитаем найденное наибольшее число (оно может быть и нулем)
A -= *M_ptr++;

//записываем значение цифры. Все цифры находятся в 4-м ряду матрицы
DecDigit[dec_digit_index++] = *M_Digits_ptr++;
} while (A>0);

В данном алгоритме будут присутствовать начальные незначащие нули, если число меньше 1000. Избавиться от этого несложно путем добавления флага "быть_первой_найденной_ненулевой_цифрой". Либо можно в конце найти индекс первой ненулевой цифры и запомнить его, а при выводе числа на экран начинать вывод с этого индекса.

Количество операций будет пропорционально 40*3+4*4+2

Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 
NoIX ключ Запомнить

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Rambler's Top100 Рейтинг@Mail.ru
Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание

E-mail: info@telesys.ru