您尚未登录。

楼主 #1 2018-02-13 21:46:58

bunny
会员
注册时间: 2020-05-23
已发帖子: 154
积分: 154

2018马上就来了,趁着年前发一个以前写的大数运算的代码

朝花夕拾,根据印象重新写的,先贴一个整数的加法运算

#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;
}

离线

楼主 #4 2018-02-13 22:03:39

bunny
会员
注册时间: 2020-05-23
已发帖子: 154
积分: 154

Re: 2018马上就来了,趁着年前发一个以前写的大数运算的代码

daydayup 说:

哈,这个不错,可以多少位十进制数,有没有限制?

基于字符串的运算,跟小学时候的手算是一个思路,无位数限制,就是运算速度慢点

离线

楼主 #5 2018-02-13 22:04:42

bunny
会员
注册时间: 2020-05-23
已发帖子: 154
积分: 154

Re: 2018马上就来了,趁着年前发一个以前写的大数运算的代码

晕哥 说:

感谢楼上两位对小站的支持!

今年转战你的论坛,希望你的论坛越办越好

离线

楼主 #6 2018-02-13 22:06:50

bunny
会员
注册时间: 2020-05-23
已发帖子: 154
积分: 154

Re: 2018马上就来了,趁着年前发一个以前写的大数运算的代码

晕哥 说:

感谢楼上两位对小站的支持!

不过论坛好像对贴图支持不太好啊,有些不方便

离线

楼主 #7 2018-02-13 22:08:41

bunny
会员
注册时间: 2020-05-23
已发帖子: 154
积分: 154

Re: 2018马上就来了,趁着年前发一个以前写的大数运算的代码

TIM20180213214502.png

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn