Сложение в разных системах счисления - исправить и оптимизировать - C (СИ)
Формулировка задачи:
Я написал подпрограмму для сложения чисел в системах счисления от 2 до 10. Но у неё есть баги (особенно во 2 с/с) и она не очень то эффективна. Помогите исправить баги и как можно её ускорить и повысить эффективность?
m и n - это исходные 2 числа для сложения, ss - система счисления.
mm[] и nn[] - это исходные 2 числа представленные в разрядах как массив, rr[] - результат представленный как массив.
int summa(int m,int n,int ss) { int mm[10],nn[10],rr[10]; int i=0,j=0,k=0,result=0; while(i<10) {mm[i]=nn[i]=rr[i]=0;i++;} i=0; while(m>0) {mm[i]=m%10;m=m/10;printf("\nmm[i]=%d",mm[i]);i++;} while(n>0) {nn[j]=n%10;n=n/10;printf("\nnn[j]=%d",nn[j]);j++;} for(;k<10;k++) { rr[k]=rr[k]+nn[k]+mm[k]; if(rr[k]>=ss) { rr[k]=rr[k]%ss; rr[k+1]=1; } printf("\nrr[%d]=%d",k,rr[k]); } for(k=0;k<10;k++) result=result+rr[k]*pow(10,k); return result; }
Решение задачи: «Сложение в разных системах счисления - исправить и оптимизировать»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> char *DIGITS = "0123456789abcdefghijklmnopqrstuvwxyz"; void printByBase(long val, size_t base){ if ( val / base ) printByBase(val / base, base); putchar(DIGITS[val % base]); } int main(){ char buf[BUFSIZ]; long first, second, result; size_t base; while ( 1 ){ printf("Base (just ENTER to exit): "); fgets(buf, BUFSIZ, stdin); if ( *buf == '\n' ) break; base = atoi(buf); if ( base < 2 || base > 36 ){ printf("Base must be between 2 and 36\n"); continue; } printf("First number: "); fgets(buf, BUFSIZ, stdin); first = strtol(buf, NULL, base); printf("Second number: "); fgets(buf, BUFSIZ, stdin); second = strtol(buf, NULL, base); result = first + second; printByBase(first, base); printf(" + "); printByBase(second, base); printf(" = "); printByBase(result, base); putchar('\n'); } return 0; }
Объяснение кода листинга программы
- Объявлены две переменные: char *DIGITS =
0123456789abcdefghijklmnopqrstuvwxyz
; и long first, second, result; - Задана функция printByBase(long val, size_t base), которая печатает число в заданной системе счисления.
- В функции printByBase(long val, size_t base) используется рекурсия для печати числа в заданной системе счисления.
- В функции main() задан цикл while, который продолжается до тех пор, пока пользователь не введет 'Enter'.
- В каждой итерации цикла пользователю предлагается ввести основание системы счисления, первое и второе числа.
- Введенные числа преобразуются в тип long и проверяются на корректность ввода.
- Если числа корректны, то они складываются и результат выводится на экран в заданной системе счисления.
- Код не содержит ошибок и оптимизирован для работы с большими числами в заданной системе счисления.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д