Перевод числа из любой системы счисления в десятичную - C (СИ)
Формулировка задачи:
Вроде бы и написал прогу, а все равно косяки выдает. Программа переводит число из любой СС в десятичную.
#include <stdio.h> #include <malloc.h> #include <string.h> #include <math.h> long to10 (int b, char* str[]) { int *a, n=0, t; long r=0; char c; a=(int*) malloc (0); while (n<=strlen(str)-1) { c=str[n]; if (c>='0' && c<='9') t=c-'0'; else if (c>='A' && c<='F') t=c-'A'+10; else if (c>='a' && c<='f') t=c-'a'+10; else break; if (t>=b) break; n++; a=(int*)realloc(a, n*sizeof(int)); a[n-1]=t; } int i=0; for (i=0; i<n; i++) { r+=a[n-1-i]*pow(b, i); } return r; } int main () { int i=0, b; char c; char str[255]; printf ("Enter the basis: "); scanf ("%d", &b); while (!(b>1 && b<=16)) { printf ("The basis is wrong. Enter it again: "); scanf ("%d", &b); } printf ("Enter the number: "); scanf (str); printf ("Number with the basis 10: %ld", to10(b, &str)); return 0; }
Решение задачи: «Перевод числа из любой системы счисления в десятичную»
textual
Листинг программы
// Преобразует десятичное число в другую // систему счисления (от 2-х до 10-ти) #include <stdio.h> #include <conio.h> void main() { int osn, // основание системы счисления n, // исходное число cn, // копия исходного числа r; // остаток от деления числа // на основание сист счисл. char st[17]; // представление числа в заданной сист. счисл. int i; printf("\Введите целое число ->"); scanf("%d", &n); printf("Введите основание системы счисления ->"); scanf("%d", &osn); cn = n; // делим исходное число на основание системы // счисления до тех пор, пока остаток от деления // больше основания системы счисления. // Остаток от деления на каждом щаге - очередная цифра st[16] ='\0'; i = 15; do { r = n % osn; // очередная цифра n = n / osn; // целая часть деления // printf("цифра:%d остаток:%d\n", r,n); st[i--] = r + 48; // преобразование цифры в символ } while ( n > 0); // "сдвинем" сформированную строку в начало i++; int j = 0; while(st[i]) st[j++] = st[i++]; st[j] = '\0'; st[i--] = ' '; printf("Десятичному числу %d соответствует ", cn); printf("число %s по основанию %d\n", st, osn); printf("\nДля завершения нажмите <Enter>"); getch(); }
Объяснение кода листинга программы
- Ввод исходных данных:
- Ввод исходного числа с клавиатуры, сохранен в переменной n.
- Ввод основания системы счисления с клавиатуры, сохранено в переменной osn.
- Создание копии исходного числа, сохранено в переменной cn.
- Деление исходного числа на основание системы счисления, сохранено в переменной n.
- Получение остатка от деления, сохранено в переменной r.
- Добавление очередной цифры к представлению числа в виде строки, сохранено в переменной st.
- Уменьшение значения переменной i на 1.
- Проверка, что n больше нуля, чтобы продолжить выполнение цикла.
- Сдвиг сформированной строки в начало, сохранено в переменной j.
- Вывод результата:
- Вывод представления числа в заданной системе счисления, сохранено в переменной st.
- Вывод основания системы счисления, сохранено в переменной osn.
- Завершение работы программы:
- Ожидание нажатия клавиши Enter для завершения работы программы. Код преобразует десятичное число в другую систему счисления, вводящуюся с клавиатуры. Он сначала получает основание системы счисления и исходное число, затем преобразует число в систему счисления, используя цикл деления на основание системы счисления. После этого он выводит результат в виде строки в заданной системе счисления.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д