ENG  RUSTimus Online Judge
Online Judge
Задачи
Авторы
Соревнования
О системе
Часто задаваемые вопросы
Новости сайта
Форум
Ссылки
Архив задач
Отправить на проверку
Состояние проверки
Руководство
Регистрация
Исправить данные
Рейтинг авторов
Текущее соревнование
Расписание
Прошедшие соревнования
Правила
вернуться в форум

Обсуждение задачи 1013. K-ичные числа. Версия 3

Help Please WA#8
Послано ABCDE 24 мар 2006 16:12
Here is my code

#include<stdio.h>
long len[2],a[2][10000];
sum(int x)
{
    int i;
    for(i=9999;i>=10000-len[(x)%2];i--)
    {
        a[(x-1)%2][i] = a[x%2][i] + a[(x-1)%2][i];
        if(a[(x-1)%2][i]>=10)
        {
            a[(x-1)%2][i] = a[(x-1)%2][i]%10;
            a[(x-1)%2][i-1]++;
            if(i==10000-len[(x-1)%2])
                len[(x-1)%2]++;
        }
    }
    return 0;
}
multiply(int x,int k)
{
    int i,tod;
    tod=0;
    for(i=9999;i>=10000-len[(x-1)%2];i--)
    {
        a[(x-1)%2][i] = a[(x-1)%2][i] * k+tod;
        tod = 0;
        if(a[(x-1)%2][i]>=10)
        {
            tod = a[(x-1)%2][i]/10;
            a[(x-1)%2][i] = a[(x-1)%2][i]%10;
            if(i==10000-len[(x-1)%2])
                len[(x-1)%2]++;
        }
    }
    return 0;
}

main()
{
    long n,k,i,tmp;
    scanf("%ld %ld",&n,&k);
    a[0][9999] = 1;
    a[1][9999] = k-1;
    len[0] = 1;
    len[1] = 1;
    for(i=1;i<n;i++)
    {
        sum(i);
        multiply(i,k-1);
    }
    tmp = i;
    for(i=10000-len[tmp%2];i<=9999;i++)
        printf("%ld",a[tmp%2][i]);
    return 0;
}