朝花夕拾,根据印象重新写的,先贴一个整数的加法运算
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef int bool;
#define false (-1)
#define true (0)
static bool char_check(char c) {
    if (c > '9') {
        return false;
    }
    if (c < '0') {
        return false;
    }
    return true;
}
static bool str_check(const char* src) {
    for ( ; *src; src++) {
        if (false == char_check(*src)) {
            return false;
        }
    }
    return true;
}
static void str_reverse(char* s) {
    char temp;
    char* r = s + strlen(s) - 1;
    while (s < r) {
        temp = *s;
        *s++ = *r;
        *r-- = temp;
    }
}
static bool char_add(char a, char b, char* c, char* d) {
    if (false == char_check(a)) {
        return false;
    }
    if (false == char_check(b)) {
        return false;
    }
    a -= '0';
    b -= '0';
    *d = a + b + (*c);
    if (*d > 9) {
        *d -= 10;
        *c = 1;
    }
    else {
        *c = 0;
    }
    *d += '0';
    return true;
}
static bool str_add(const char* a, const char* b, char* d) {
    char aa, bb, c = 0;
    int len_a = strlen(a), len_b = strlen(b);
    char* p_a = a + len_a - 1;
    char* p_b = b + len_b - 1;
    char* p_d = d;
    if (false == str_check(a)) {
        return false;
    }
    if (false == str_check(b)) {
        return false;
    }
    for ( ; (len_a > 0) || (len_b > 0); ) {
        aa = len_a > 0? *p_a-- : '0';
        bb = len_b > 0? *p_b-- : '0';
        char_add(aa, bb, &c, p_d++);
        len_a--;
        len_b--;
    }
    str_reverse(d);
    return true;
}
int main()
{
    char* a = "16664129129421912941294";
    char* b = "34666666666543854397591";
    char c[100] = "";
    str_add(a, b, c);
    printf("%s!\n", c);
    return 0;
}离线
哈,这个不错,可以多少位十进制数,有没有限制?
离线
哈,这个不错,可以多少位十进制数,有没有限制?
基于字符串的运算,跟小学时候的手算是一个思路,无位数限制,就是运算速度慢点
离线
感谢楼上两位对小站的支持!
今年转战你的论坛,希望你的论坛越办越好
离线
感谢楼上两位对小站的支持!
不过论坛好像对贴图支持不太好啊,有些不方便
离线

离线
离线
daydayup 说:哈,这个不错,可以多少位十进制数,有没有限制?
基于字符串的运算,跟小学时候的手算是一个思路,无位数限制,就是运算速度慢点
这个强大,改天编译下试一试。
这个题目作为面试题的频率也挺高哈,
值得学习!
离线
我在阿莫论坛也发过一个大数字的加减乘除,当时用来算DDS的系数的,不知道淹没在哪个沟里了
离线
顶一个
离线