您尚未登录。

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

离线

#2 2018-02-13 21:57:13

daydayup
会员
注册时间: 2017-10-09
已发帖子: 343
积分: 343

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

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

离线

#3 2018-02-13 21:59:00

晕哥
管理员
注册时间: 2017-09-06
已发帖子: 9,349
积分: 9202

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

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





离线

楼主 #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

离线

#8 2018-02-13 22:11:38

晕哥
管理员
注册时间: 2017-09-06
已发帖子: 9,349
积分: 9202

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

xxzouzhichao 说:
晕哥 说:

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

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

对,贴图是麻烦一点,不过这个已经在我们的改进计划里面了,
现在新出来的bbs系统多是基于html5 + websoket 长连接,
这个punbbs已经落后于时代了。





离线

#9 2018-02-13 22:14:11

daydayup
会员
注册时间: 2017-10-09
已发帖子: 343
积分: 343

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

xxzouzhichao 说:
daydayup 说:

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

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

这个强大,改天编译下试一试。
这个题目作为面试题的频率也挺高哈,
值得学习!

离线

#10 2018-02-13 22:15:48

晕哥
管理员
注册时间: 2017-09-06
已发帖子: 9,349
积分: 9202

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

xxzouzhichao 说:
晕哥 说:

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

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

非常感谢,我感觉不是一个人在战斗了,有一群人在战斗!





离线

#11 2018-05-08 22:11:13

演技担当黄晓明
会员
注册时间: 2017-10-17
已发帖子: 184
积分: 122.5

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

我在阿莫论坛也发过一个大数字的加减乘除,当时用来算DDS的系数的,不知道淹没在哪个沟里了

离线

#12 2018-07-31 22:05:30

abc3240660
会员
注册时间: 2018-07-31
已发帖子: 100
积分: 100

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

顶一个

离线

页脚

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

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