(每日一练28805)题目名称:c++难题-大数加法

文盲老顾
WEB应用领新星创作者
博客专家认证
2023-06-18 15:04:29

大数一直是一个c语言的一个难题。 现在我们需要你手动模拟出大数加法过程。 请你给出两个大整数加法结果。

是不是不用 c++ 这个题目就没啥意义了?

print(int(input())+int(input()))
...全文
339 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
CSDN-Ada助手 2023-06-18
精选
  • 打赏
  • 举报
回复
您的问题已经帮您同步至问答, 链接: https://ask.csdn.net/questions/7966354, 请您保持关注, 如果回答有帮助解决此问题, 麻烦您动动小手给相关的回答点赞, Ada会在评论区为您更新结题状态
赵4老师 2023-06-21
  • 打赏
  • 举报
回复 1

#include <stdio.h>
#include <string.h>
#define MAXLEN 1000
char a1[MAXLEN];
char a2[MAXLEN];
static int v1[MAXLEN];
static int v2[MAXLEN];
static int v3[MAXLEN];
int i,j,n,L,z;
void main(void) {
    scanf("%d",&n);
    for (j=0;j<n;j++) {
        scanf("%s%s",a1,a2);

        L=strlen(a1);
        for (i=0;i<L;i++) v1[i]=a1[L-1-i]-'0';

        L=strlen(a2);
        for (i=0;i<L;i++) v2[i]=a2[L-1-i]-'0';

        for (i=0;i<MAXLEN;i++) v3[i]=v1[i]+v2[i];

        for (i=0;i<MAXLEN;i++) {
            if (v3[i]>=10) {
                v3[i+1]+=v3[i]/10;
                v3[i]=v3[i]%10;
            }
        }

        printf("Case %d:\n", j+1);
        printf("%s + %s = ", a1, a2);

        z=0;
        for (i=MAXLEN-1;i>=0;i--) {
            if (z==0) {
                if (v3[i]!=0) {
                    printf("%d",v3[i]);
                    z=1;
                }
            } else {
                printf("%d",v3[i]);
            }
        }
        if (z==0) printf("0");

        printf("\n");
    }
}
//Sample Input
//3
//0 0
//1 2
//112233445566778899 998877665544332211
//
//Sample Output
//Case 1:
//0 + 0 = 0
//Case 2:
//1 + 2 = 3
//Case 3:
//112233445566778899 + 998877665544332211 = 1111111111111111110

对象被抛出 2023-06-18
  • 打赏
  • 举报
回复

之前写过一个c++的大数模板...不过加减只能处理同号的情况....

class BigInteger {
private:
    string __version__ = "1.0";
    int d[MAX];        // 左对齐存储数字, d[0]存储大数字的最低位, d[MAX-1]存储最高位
    int len;
    bool positive;    // 正负
public:
    BigInteger();        // 无参构造
    BigInteger(string str);    // 有参构造, 返回字符串对应的大整数, 字符串第一位为符号位, +省略
    int getLength();    // 整数长度, 不包括符号位
    bool isPositive();    // 是否为正
    string getVersion();
    string toString(bool withFlag);    // withFlag表示是否返回符号位
 
    // 重载五种基本比较
    bool operator < (const BigInteger& bint)const;    
    bool operator > (const BigInteger& bint)const;
    bool operator == (const BigInteger& bint)const;
    bool operator >= (const BigInteger& bint)const;
    bool operator <= (const BigInteger& bint)const;
    
    // 重载输出格式
    friend ostream& operator<< (ostream& out, const BigInteger& bint);    
 
    // 大整数之间的运算
    BigInteger operator+(BigInteger& bint);
    BigInteger operator-(BigInteger& bint);
    BigInteger operator*(BigInteger& bint);
    BigInteger operator/(BigInteger& bint);
    BigInteger operator%(BigInteger& bint);
    void operator+=(BigInteger& bint);
    void operator-=(BigInteger& bint);
    void operator*=(BigInteger& bint);
    void operator%=(BigInteger& bint);
};
 
BigInteger BigInteger::operator+(BigInteger& bint) {
    assert(this->positive == bint.positive);
    BigInteger result;
    result.positive = this->positive;
    int carry = 0;    // 进位
    for (int i = 0; i < this->len || i < bint.len; i++) {
        int temp = this->d[i] + bint.d[i] + carry;
        result.d[result.len++] = temp % 10;
        carry = temp / 10;
    }
    if (carry != 0)    result.d[result.len++] = carry;
    return result;
}

321

社区成员

发帖
与我相关
我的任务
社区描述
主要用于技术交流,包括但不限于 .net,mssql,js,css,python,算法,运维。也可以晒最新技术,美图,运动等。最后,如果有问题,可以提问,老顾能帮忙的会尽量帮忙哦。
前端sqlserverasp.net 技术论坛(原bbs) 北京·西城区
社区管理员
  • 文盲老顾
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧