C - 如果长度不同,则将 2 个字符串中的数字加在一起

标签 c string

如果我有两个字符串:

a = "1234"
b = "4321"

我可以像这样将两个数字加在一起:

for(i=0; i<width-1; i++){
    sum = (a[width-2-i]-48) + (b[width-2-i]-48) + carry;
    carry = 0;
    if(sum > 9){
        carry = 1;
        sum-=10;
    }
    answer[i] = sum+48;
}

if(carry) answer[i++] = carry+48;
answer[i]= 0;

然后反转(宽度等于strlen(a))。

如果出现以下情况,我怎么能做同样的事情呢?

a = "12345"
b = "4321"

我需要重新分配内存吗?或者什么?

(顺便说一句 - the problem I'm trying to solve 使用了许多 50 位数字,因此据我所知,strtoul 或 strtoull 是不可能的。Here's my code so far。)

最佳答案

int getcharval(const char *s, int idx) {
    if (idx < strlen(s))
        return s[strlen(s) - idx - 1] - 48; 
    return 0;
}

void add() {
    const char *a = "1234";
    const char *b = "13210";
    char answer[256];
    int i, wa=strlen(a), wb=strlen(b), width, sum, carry;
    width = wa > wb ? wa : wb; 
    for(i=0; i<width; i++){
        char ca = getcharval(a, i); 
        char cb = getcharval(b, i); 
        printf("%d %d\n", ca, cb);
        sum = ca + cb + carry;
        carry = 0;
        if(sum > 9){ 
            carry = 1;
            sum-=10;
        }
        answer[i] = sum+48;
    }   
    if(carry) answer[i++] = carry+48;
    answer[i]= 0;
    for (i = 0; i < strlen(answer) / 2; i++) {
        char t = answer[i];
        answer[i] = answer[strlen(answer) - i - 1]; 
        answer[strlen(answer) - i - 1] = t;
    }   

    printf("%s\n", answer);
}

关于C - 如果长度不同,则将 2 个字符串中的数字加在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16660677/

相关文章:

c - 如何从 C 中的文本文件填充矩阵(结构)?

r - Shiny ——以特定(非字母)顺序显示选择输入的选项

C 字符串文字不在机器代码中?

c - 在不同的arduinos上闪烁LED

c - 在不被键盘记录器检测到的情况下向应用程序发送 key 的替代方法是什么?

c - 在实际打开文件之前验证文件路径

c++ - Windows MSG 结构与遗留项目代码结构 MSG 冲突

xml - 提取 Xpath 中包含字符串的图像

java - 即使字符串池中已有可用的对象,字符串追加也会花费更多时间

vb.net - 按最后一次出现拆分字符串