gpt4 book ai didi

c - 如何对两个包含长数字的字符串进行加法?在C中

转载 作者:行者123 更新时间:2023-11-30 20:29:00 25 4
gpt4 key购买 nike

char* a = "5880391469248794735212"
char* b = "1234567890231"

我需要进行加法计算并将新数字放入字符串中。
我尝试将每个数字转换为整数,将它们相加并将结果转换为字符串,但数字的最大值是 unsigned long long ,它不能包含我显示的数字。

感谢您的帮助!

最佳答案

您应该使用像 GMP 这样的大数字库,但如果您愿意,也可以尝试以下代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *add(char *x, char *y);

int main(void)
{
char *a = "5880391469248794735212";
char *b = "1234567890231";

char *c = add(a, b);

printf("z: %s\n", c);

free(c);
return 0;
}

void reverseString(char *buf)
{
char *ptr = buf + strlen(buf) - 1;

while (buf < ptr) {
char tmp = *buf;
*buf++ = *ptr;
*ptr-- = tmp;
}
}

char *add(char *a, char *b)
{
size_t xlen = strlen(a);
size_t ylen = strlen(b);

size_t n = 0;

int val;
int r = -1;

char *p1, *p2;
char *t1, *t2;

char *c = NULL;

if (xlen >= ylen) {
p1 = a + xlen - 1; t1 = a;
p2 = b + ylen - 1; t2 = b;
c = (char *)malloc(xlen + 2);
}
else {
p1 = b + ylen - 1; t1 = b;
p2 = a + xlen - 1; t2 = a;
c = (char *)malloc(ylen + 2);
}
if (!c) {
fputs("error: memory allocation failed.\n", stderr);
return NULL;
}

while (p2 >= t2)
{
if (r == -1) {
val = (*p1-- - '0') + (*p2-- - '0');
}
else {
val = (*p1-- - '0') + (*p2-- - '0') + 1;
}
if (val > 9) {
r = val - 10;
c[n++] = r + '0';
}
else {
c[n++] = val + '0';
r = -1;
}
}

while (p1 >= t1)
{
if (r == -1) {
c[n++] = *p1--;
}
else {
val = (*p1-- - '0') + 1;
if (val > 9) {
r = val - 10;
c[n++] = r + '0';
}
else {
c[n++] = val + '0';
r = -1;
}
}
}
if (r != -1) {
c[n++] = '1';
}
c[n] = '\0';
reverseString(c);
return c;
}

关于c - 如何对两个包含长数字的字符串进行加法?在C中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59469287/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com