Перевод числа в новую систему счисления в виде вектора

Нужно преобразовать число из 10-чной системы счисления в заданную, с основанием от 2 до 9, и получить значение в векторе (не переворачивая его) для дальнейших вычислений. Что сделано не так, как исправить?

#include <stdio.h>
#include <locale.h>
#include <math.h>
#include <stdlib.h> 
 
int Preobraz(int a, int p) //процедура преобразования
{
    int i, nov[100];
    for (i = 0; a; a /= p, i++) 
 
        nov[i] = a % p; //элементу присвоить остаток от деления 
 
    return nov[i];
}
 
int main()
{
    int n, p; nnov[100]; //nnov - число в новой системе счисления в виде вектора
    setlocale(LC_ALL, "Rus");
    printf("Введите число n=");
    scanf_s("%d", &n);
    printf("Введите основание новой системы счисления от 2 до 9 p=");
    scanf_s("%d", &p);
    while (p < 2 || p > 9)
    {
        printf("Введите заново (значение некорректно) p=");
        scanf_s("%d", &p);
    }
    nnov[100] = Preobraz(n, p);
    printf("Число n в новой СС=%d\n", nnov[100]);
}

Ответы (1 шт):

Автор решения: Zombotron

И как вы хотите преобразовать число в массив? Судя по коду, вы хотите создать массив из цифр числа. Так это можно сделать проще: перевести число в нужную систему счисления средствами яп, преобразовать в строку, перебрать строку с конца посимвольно, преобразовать символ (или оставить строками или чарами) в инт, запичкать в массив. Так работает:

#include <stdio.h>
#include <locale.h>
#include <math.h>
#include <stdlib.h> 

    int main()
    {
        int n, p, nnov[100]; //nnov - число в новой системе счисления в виде вектора
        setlocale(LC_ALL, "Rus");
        printf("Введите число n=");
        scanf("%d", &n);
        printf("Введите основание новой системы счисления от 2 до 9 p=");
        scanf("%d", &p);
        while (p < 2 || p > 9)
        {
            printf("Введите заново (значение некорректно) p=");
            scanf("%d", &p);
        }

        int i;
        for (i = 0; n; n /= p, i++)
            nnov[i] = n % p; //элементу присвоить остаток от деления
            
        printf("Число n в новой СС= ");
        for(int j = 0; j < i; j++) {
            printf("%d ", nnov[j]);
        }
    }

В Си такое

nnov[100] = Preobraz(n, p);

и такое

printf("Число n в новой СС=%d\n", nnov[100]);

не фунциклирует.

→ Ссылка