Перевод числа в новую систему счисления в виде вектора
Нужно преобразовать число из 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]);
не фунциклирует.