鱼C论坛

 找回密码
 立即注册
查看: 1570|回复: 6

[已解决]C\大数相加

[复制链接]
发表于 2018-11-12 19:37:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
请问大数相加(位数不确定)如何写程序,我想的是用数组或动态存储,但是不知道怎么存和怎么输出。
最佳答案
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[MAX] {0};
        cin >> a;
        cout << "请输入第二个整数:" << endl;
        char* b = new char[MAX] {0};
        cin >> b;
        char* c = new char[MAX] {0};
        //核心代码
        int m = 0, n = 0;        //位数
        while (a[m]) m++;
        while (b[n]) n++;
        int r = m > n ? m + 1 : n + 1;        //结果最多比原数据多1位
        int carry = 0;        //加法进位
        m--, n--, r--;  //数组下标从0开始
        while (m >= 0 && n >= 0)
        {
                c[r] = a[m--] + b[n--] - '0'*2 + carry;
                carry = c[r] / 10;  //进位
                c[r] = c[r]%10+'0';                        //本位
                r--;
        }
        while (m >= 0)
        {
                c[r] = a[m--] -'0' + carry;
                carry = c[r] / 10;
                c[r] = c[r] % 10 + '0';
                r--;
        }
        while (n >= 0)
        {
                c[r] = a[n--] -'0' + carry;
                carry = c[r] / 10;
                c[r] = c[r] % 10 + '0';
                r--;
        }
        char* result;
        if (carry == 1)
        {
                c[0] = 1+'0';
                result = c;
        }
        else
        {
                result = &c[1];
        }
        cout << r;
        cout << "结果是:" << endl;
        cout << result << endl;

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

}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-11-12 19:52:46 | 显示全部楼层
就存在字符串里吧,然后模拟加法,进位什么的。我也去试试哦。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-11-12 22:52:32 | 显示全部楼层
谢谢,我也是想到c++的输入输出可能容易一些,但是用C是可以输入输出的吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-13 07:59:40 | 显示全部楼层
lemon3 发表于 2018-11-12 22:52
谢谢,我也是想到c++的输入输出可能容易一些,但是用C是可以输入输出的吗?

你把核心代码前后的改掉不就行了
测测有没有问题吧,然后标为已解决吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-13 20:45:44 | 显示全部楼层
lemon3 发表于 2018-11-12 22:52
谢谢,我也是想到c++的输入输出可能容易一些,但是用C是可以输入输出的吗?

当然可以啊。我不用printf函数是因为我编译器老是警告不安全,我懒得调...
另外第4行的常量定义好像也是C++的特性,可以改成#define MAX 100
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-11-14 14:16:50 | 显示全部楼层
抱歉,我在网上看了一些配置,找到了pch的一些东西,没找到最后一步怎么做,我的visual里面无法识别pch.
https://blog.csdn.net/Acheld/article/details/52693646?utm_source=blogxgwz6
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-2 22:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表