用数组实现随机大数的存储和相加

#include<stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#define MAXSIZE 51
typedef int ElemType;
typedef int Status;
typedef struct
{
    ElemType elem[MAXSIZE];
    ElemType yuansu_a[MAXSIZE];
    ElemType yuansu_b[MAXSIZE];
    int length_a;
    int length_b;
   
}SeqList;
int CreateRandomBigInt(SeqList *L)
{
	int i,k,j;
	srand((unsigned)time( NULL ) );
    
    i=rand()%(50);
	L->length_a =i;
	for(k=0;k<i;k++)
    L->yuansu_a[k] = rand()%(9);
	printf("\n第一次创建l一个%d位的大数\n",i);
    for(k=0;k<i;k++)
	printf("%d",L->yuansu_a[k] );
	printf("\n");
    j=rand()%(50);
    L->length_b=j;
    for(k=0;k<j;k++)
    L->yuansu_b[k] = rand()%(9);
    printf("\n第二次创建了一个%d位的大数\n",j);
    for(k=0;k<j;k++)
    printf("%d",L->yuansu_b[k] );
    printf("\n");
	return 1;
}
int AddBigInt(SeqList *q)
{
int k,l,t,count=0,zc=0,zcc=0;
int logo=0;
int longer[100],shorter[100];
int i,j;
printf("\n两大数相加之后的结果为:\n"); 
if(q->length_a > q->length_b)
{
	k=q->length_a;
	count=k;
	i=k;
	l=q->length_b;
	j=l;
	if(q->yuansu_a[0]==9)
	{
      k+=1;
	  count=k;
	i=k;
	}else{;}
}else
{
	k=q->length_b;
	count=k;
	i=k;
	l=q->length_a;
	j=l;
	if(q->yuansu_b[0]==9)
	{
		k+=1;
			count=k;
	}else{;}
}
if(q->length_a > q->length_b)
{
	for(t=0;t<q->length_a;t++)
	{
	longer[t]=q->yuansu_a[t];
	}
    for(t=0;t<q->length_b;t++)
	{
		shorter[t]=q->yuansu_b[t];
	}
}else{
	for(t=0;t<q->length_b;t++)
	{
	longer[t]=q->yuansu_b[t];
	}
    for(t=0;t<q->length_a;t++)
	{
		shorter[t]=q->yuansu_a[t];
	}
}
while(l>=0)
{
if(longer[k]+shorter[l]>=10)
{
    
    q->elem[k]=(longer[k]+shorter[l]+logo)%10;
		if(l==0)
	{
		zcc=longer[k]+shorter[l]+logo;
	}
	else
	{
         zc=longer[k]+shorter[l]+logo;
	}
		logo=0;
	 
	if(zc>=10&&k!=i&&l!=j)
	{
		logo=1;
	}
    if(longer[k]+shorter[l]>=10&& k==i&&l==j)
	{
		logo=1;
	}
}else{ 
	  	if(zc>=10&&k!=i&&l!=j)
	{
		q->elem[k]=longer[k]+shorter[l]+1;
		zc=0;
		if(q->elem[k]>=10)
		{
			zc=q->elem[k];
         q->elem[k]=q->elem[k]%10;
		 logo=1;	 
		}
		else
		{
			logo=0;
		}       
	}
         else
  {
   q->elem[k]=longer[k]+shorter[l];
   logo=0;
  } 
}
  k--;
  l--;
}
 while(k>=0)
	{
	 if(zcc>=10)
	 {
		 q->elem[k]=longer[k]+1;
		 if(q->elem[k]>=10)
		 {
			 zcc=q->elem[k];
			 q->elem[k]=q->elem[k]%10;
		 }	
	 }
	 else
	 {
	q->elem[k]=longer[k];
	 }
	 k--;
	 zcc=0;
	}
for(i=0;i<count;i++)
printf("%d ",q->elem[i]);
return 1;
}
int main()
{    
	SeqList p;
                CreateRandomBigInt(&p);
                AddBigInt(&p);
                return 0;
}
 

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值