lemon3 发表于 2018-11-12 19:37:12

C\大数相加

请问大数相加(位数不确定)如何写程序,我想的是用数组或动态存储,但是不知道怎么存和怎么输出。

砚堂_ 发表于 2018-11-12 19:52:46

就存在字符串里吧,然后模拟加法,进位什么的。我也去试试哦。

砚堂_ 发表于 2018-11-12 20:29:09

本帖最后由 砚堂_ 于 2018-11-12 20:37 编辑

可以做到,就是有点繁琐。贴上C++的代码(只是用C++做了输入输出,别的部分和C语言是相通的)
这段代码只能进行正整数的相加,没有考虑小数,也没有考虑负数的情况。

#include "pch.h"
#include <iostream>
using namespace std;
const int MAX = 100;

int main()
{
        cout << "大整数相加" << endl;
        cout << "请输入第一个整数:" << endl;
        char* a = new char {0};
        cin >> a;
        cout << "请输入第二个整数:" << endl;
        char* b = new char {0};
        cin >> b;
        char* c = new char {0};
        //核心代码
        int m = 0, n = 0;        //位数
        while (a) m++;
        while (b) n++;
        int r = m > n ? m + 1 : n + 1;        //结果最多比原数据多1位
        int carry = 0;        //加法进位
        m--, n--, r--;//数组下标从0开始
        while (m >= 0 && n >= 0)
        {
                c = a + b - '0'*2 + carry;
                carry = c / 10;//进位
                c = c%10+'0';                        //本位
                r--;
        }
        while (m >= 0)
        {
                c = a -'0' + carry;
                carry = c / 10;
                c = c % 10 + '0';
                r--;
        }
        while (n >= 0)
        {
                c = a -'0' + carry;
                carry = c / 10;
                c = c % 10 + '0';
                r--;
        }
        char* result;
        if (carry == 1)
        {
                c = 1+'0';
                result = c;
        }
        else
        {
                result = &c;
        }
        cout << r;
        cout << "结果是:" << endl;
        cout << result << endl;

        getchar();
        delete a;
        delete b;
        delete c;
        return 0;

}

lemon3 发表于 2018-11-12 22:52:32

谢谢,我也是想到c++的输入输出可能容易一些,但是用C是可以输入输出的吗?

HOHD 发表于 2018-11-13 07:59:40

lemon3 发表于 2018-11-12 22:52
谢谢,我也是想到c++的输入输出可能容易一些,但是用C是可以输入输出的吗?

你把核心代码前后的改掉不就行了
测测有没有问题吧,然后标为已解决吧

砚堂_ 发表于 2018-11-13 20:45:44

lemon3 发表于 2018-11-12 22:52
谢谢,我也是想到c++的输入输出可能容易一些,但是用C是可以输入输出的吗?

当然可以啊。我不用printf函数是因为我编译器老是警告不安全,我懒得调...
另外第4行的常量定义好像也是C++的特性,可以改成#define MAX 100

lemon3 发表于 2018-11-14 14:16:50

抱歉,我在网上看了一些配置,找到了pch的一些东西,没找到最后一步怎么做,我的visual里面无法识别pch.
https://blog.csdn.net/Acheld/article/details/52693646?utm_source=blogxgwz6
页: [1]
查看完整版本: C\大数相加