一道数据结构内顺序表的题

一道数据结构内顺序表的题
已知A、B分别是m、n位(位数为小于30的随机正整数)的随机正整数,编写程序给出这两个正整数相加的结果。如:A=47858628539074,B= 212821064467,C=A+B=48071449603541

输入m和n,随机生成m位和n位数,运行结果如下:

img

代码:

#include <iostream>
#include <time.h>
#include <stdlib.h>
using namespace std;
#define MAXLEN (int)100
struct LinkList 
{
    int data[MAXLEN];
    int length;
};

void initList(LinkList &ls)
{
    ls.length = 0;
}
void push(LinkList &ls,int e)
{
    ls.data[ls.length] = e;
    ls.length++;
}

int empty(LinkList ls)
{
    if(ls.length > 0)
        return 0;
    else
        return 1;
}

int gettop(LinkList &ls)
{
    ls.length--;
    return ls.data[ls.length];
}

//逆序
void reverse(LinkList &ls)
{
    int i=0,j=ls.length-1;
    while(i<j)
    {
        int t = ls.data[i];
        ls.data[i] = ls.data[j];
        ls.data[j] = t;
        i++;
        j--;
    }
}
//显示
void print(LinkList ls)
{
    for(int i = 0;i<ls.length;i++)
    {
        cout << ls.data[i] ;
    }
}
int main()
{
    LinkList la,lb,lc;
    srand(time(NULL));
    initList(la);
    initList(lb);
    initList(lc); //lc保存计算结果
    int m,n;
    cin >> m>>n;
    //生成a
    for(int i = 0;i<m;i++)
    {
        int d = rand()%10; //生成09的数
        if(i==0 && d==0)
            i--; //重新生成
        else
            push(la,d);
    }
    //生成b
    for(int i = 0;i<n;i++)
    {
        int d = rand()%10; //生成09的数
        if(i==0 && d==0)
            i--; //重新生成
        else
            push(lb,d);
    }
    print(la);
    cout <<"+";
    print(lb);
    cout <<"=";
    //计算
    int shift = 0;
    while( (!empty(la)) &&(!empty(lb)) )
    {
        int sum = gettop(la) + gettop(lb) + shift;
        if(sum >=10)
        {
            shift = 1;
            sum -= 10;
        }else
        {
            shift = 0;
        }
        push(lc,sum);
    }
    //
    while(!empty(la))
    {
        int sum = gettop(la) + shift;
        if(sum >=10)
        {
            sum -= 10;
            shift = 1;
        }else
        {
            shift = 0;
        }
        push(lc,sum);
    }
    //
    while(!empty(lb))
    {
        int sum = gettop(lb) + shift;
        if(sum >=10)
        {
            sum -= 10;
            shift = 1;
        }else
        {
            shift = 0;
        }
        push(lc,sum);
    }
    if(shift !=0)
        push(lc,shift);

    reverse(lc);

    
    print(lc);
    return 0;

}

参考

【C++】数据结构实验——顺序表实现大数相加与相乘_满脸写着暴躁的博客-CSDN博客 一、上机实验的问题和要求:问题:大数相加与相乘要求:采取线性表二、程序设计的基本思想,原理和算法描述:(包括程序的结构,数据结构,输入/输出设计,符号名说明等)首先注意到是对大数进行操作,那么就不能通过int、float等数据类型存储大数,因为可能会发生截断导致大数的数位丢失,解决办法就是使用string类型来存储大数,理论上支持最大std::string::max_size()个字节,远远超过int、float、double等类型支持的最大数字。其实个人感觉使用Pyhton来计算大数相加相乘会优 https://blog.csdn.net/qq_45888298/article/details/108686849

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632