Задача: Упорядоченные числа

Натуральное число назовем упорядоченным, если его цифры оказываются упорядоченными по неубыванию при просмотре разрядов в порядке от старших к младшим. Таковыми, например, являются числа 111, 123, 15, 1123.
Вам требуется подсчитать количество упорядоченных чисел в диапазоне [10, N], где N — заданное натуральное число.


Входные данные:

Входные данные состоят из нескольких тестов. В каждый тест входит одно натуральное число N (10 <= N <= 109). Тесты заканчиваются строкой с единственным числом 0.

Выходные данные:

Для каждого теста в одной строке выходных данных содержится единственное натуральное число – количество упорядоченных чисел в диапазоне [10, N]. Выходные данные заканчиваются строкой с числом 0.

Эта задача была на гос олимпиаде по программированию. Ну вот и моя версия её решения:


#include "stdafx.h"
#include 
#define SIZE 1000000000 // макрос для ограничения числа N
using namespace std; // для cout и cin

int _tmain(int argc, _TCHAR* argv[])
{
long int N, j;
long int b[10];
int a[10];
int i, k, iSUMMA;

while (1)
{
iSUMMA=0;
cin>>N;
if (N==0) // проверка на выход из программы
exit (1);
else
if (N>=10 && N<=SIZE) // проверка на годность
{
for (j=10; j<=N; j++) // перебор чисел от 10 до N
{
b[0]=j;
for (i=0; i<=9; i++) // цикл обработки цифр числа
{
a[i]=b[i] % 10;
b[i+1]=b[i] / 10;
if (b[i+1]==0) // если все цифры сохранены
{
for (k=0; k
{
if (a[k]
break;
else
{
if (k+1==i)
{
iSUMMA=iSUMMA+1;
break;
}
}
}
break; // переходим к следующему числу
}
}
}
cout<
}
else
cout<<"Vvedite chislo bolshe 10 i menshe 1000000000.\n";
}
return 0;
}