У меня возникла проблема с созданием рекурсивной программы, которая умножает большое число на одноразрядное число. Я понимаю, что это простые методы для этого, но я хотел бы сделать это рекурсивно. Я предоставил код SSCCE в коде. Проблема в том, что умножение происходит неправильно. Для чисел с более чем 1 цифрой программа будет умножать только последнюю цифру, а не умножать весь номер.Умножение большого числа на C с помощью одноразрядного числа рекурсивно?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *getmem(int len) {
char *ret;
ret = malloc(len);
if (NULL == ret) {
printf("memory allocation failed!\n");
exit (0);
}
else
return ret;
}
void printdigs(char *digs) {
if('0' == digs[0]) {
if (0 == digs[1]){
printf("%s", digs);
return;
}
else printdigs(&digs[1]);
}
else printf("%s",digs);
}
void multi_helper(char *a, char *r, char b, int len, int carry) {
int sum;
if (-1 == len) {
r[0] = (char) (carry + 48);
return;
}
sum = (a[len]-48) * (b-48) +carry;
r[len+1] = (char) ((sum % 10) + 48);
if (sum > 9)
carry = 1;
else carry = 0;
multi_helper(a,r,'0', len-1,carry);
}
char *multi(char *a, char b) {
char *res;
int l = strlen(a);
res = getmem(l + 2);
res[l+1] = 0;
multi_helper(a, res, b, l-1,0);
return res;
}
int main(int argc, char *argv[]) {
char *n1 = "1000";
printf("%s multiplied by 5 is ", n1);
printdigs(multi(n1,"5"));
printf("\n");
return 0;
}
Спасибо за любую помощь.
В чем проблема? Теоретически это возможно, но вы на самом деле не задавали вопрос. – Chris
Почему вы используете строковые представления чисел? Это часть требований? – xaxxon
Почему вы управляете строками? Почему бы просто не хранить сами цифры и не конвертировать их в конце, когда вы хотите распечатать? – John