我试图表示一个包含任何数字到无穷大的字符串。此数字必须是整数,并返回其值。现在,我的目标是做这个代表,但仅限于分工。因此,假设我们有125作为分子,5作为分母。答案应该是25对吗?但是,我需要将此数字表示为字符串的链接列表。目前解决这个问题的方法是通过减去"因为我可以一遍又一遍地重复这个数字,而不用担心它的余数和数字的大小。迭代必须使用10的基数,这意味着它必须读取' 0' 0到' 9'。
我的除法包括操作数A和B,以及递增计数器(将是最终结果),并减去这些操作数。这是我从Wikipedia和我的伙伴那里找到的逻辑/伪代码:
while N >= D do
then N := N - D
counter++
end
return N
在前面的例子中,125/5将得到一个25的计数器,因为我们每次迭代我们的N并用5减去它。一旦N不大于或等于D,那么我们终于可以完成并返回我们的结果根据柜台。此计数器将被放置在一个新列表中,并添加到我们当前列表中以返回其最终值。
我必须使用逻辑来制作单独的函数,但我认为某些东西的结构不正确。
关联列表
typedef struct s_list
{
void *content;
size_t content_size;
struct s_list *next;
} t_list;
typedef struct s_BigNumber
{
char *base;
int base_size;
char *exp;
int exp_size;
} t_BigNumber;
列出添加功能
void lstadd(t_list **alst, t_list *new)
{
if (new)
{
new->next = *alst;
*alst = new;
}
}
增量器
t_list *increment(t_bistro *bistro, t_list *oper)
{
t_list *incr;
t_list *counter;
incr = NULL;
lstadd(&incr, ft_lstnew(&(bistro->base[1]), 1));
counter = addition(bistro, oper, incr);
del_num(oper);
free(incr->content);
free(incr);
return (counter);
}
我的减法功能很大,需要其他功能才能工作,所以我会跳过它的代码。
这是我的实际代码,其中包含上述所有内容:
司
t_list *division(t_list *big, t_list *oper1, t_list *oper2)
{
t_list *result;
t_list *tmp;
result = NULL;
lstadd(&result, lstnew(&(big->base[0]), 1)); //Creates a new list with the result to the first index of the new list
while (oper2->content >= oper1->content)
{
tmp = result;
result = subtract(big, result, oper1);
del_num(tmp);
oper2 = increment(big, oper2);
}
return (result);
}
打印值
void digit_printer(char *num)
{
char c;
c = *num;
putchar(c);
}
void digitizer(t_list *num)
{
if (num->next)
digitizer(num->next);
digit_printer(num->content);
}
主要
int main()
{
t_list *op1;
t_list *op2;
t_list *result;
t_BigNumber *big;
char *str = "125";
char *str1 = "5";
op1 = NULL;
op2 = NULL;
while (*str)
{
lstadd(&op1, lstnew(str, 1));
str++;
}
while (*str1)
{
lstadd(&op2, lstnew(str1, 1));
str1++;
}
big = malloc(sizeof(t_BigNumber));
big->base = "0123456789";
big->base_size = 10;
result = division(big, op1, op2);
digitizer(result);
printf("\n");
}
预期产出:25
我正在寻找公开讨论,并愿意提出建议。您可以选择解决方案。一些指导和示例将帮助我:)。对不起我的整体英语。