顺序表数组——连续存储单元的应用

本文介绍了如何利用数组处理超出常规数据类型限制的大数运算,包括大数乘方及大数加法的具体实现方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

顺序表——数组:通过连续的存储单元来实现存储的数据集合

要素:首地址长度


例一:利用数组输出13^100

分析:长整型存储单元大小为4字节,最大可存储的数值为2147483647,显然13^100次方超出最大值,会产生溢出。

          考虑利用数组进行存储,一个单元只存储一个数字(0~9)。

           设数组a[N](N为足够大的数字),a[N-1]=1

           k=a[N-1]*13; a[N-1]=k%10; a[N-2]=k/10;

           每一次乘以13,相当于将数组中的每一个元素乘以13并进行进位求和

#include<stdio.h>
int main()
{
  int a[N],k,s,cp,i,j;\\N为足够大的整数
  a[N-1]=1;
  s=N-2;\\设置岗哨,永远在第一个数字的前面
  for(i=0;i<100;i++){
    j=N-1;
    cp=0;
    while(j>s){
      k=a[j]*13+cp;
      a[j--]=k%10;
      cp=k/10;      
    }
   while(cp){
    a[s--]=cp%10;
    cp/=10;
    }
  for(i=s+1;i<N;i++)
    printf("%d\t",a[i]);
  }
}

例二:任意输入两个超大整数求和并输出结果

分析:利用字符串将百位整数输入,利用数组进行处理并输出

#include<stdio.h>
#include<string.h>
int main()
{
  char s1[100],s2[100];
  int r[100],i,k,cp,x;
  cp=0;
  printf("请输入第一个整数:");
  gets(s1);
  printf("请输入第二个整数:");
  gets(s2); 
  i=strlen(s1)-1;
  j=strlen(s2)-1;
  k=99;
  while(i>-1||j>-1){
    if(i>-1&&j>-1)
      x=s1[i]-'0'+s2[j]-'0'+cp;
    else if(i>-1)
      x=s1[i]-'0'+cp;
  else if(j>-1)
    x=s2[j]-'0'+cp;
  r[k]=x%10;
  cp=x/10;
  i--;
  k--;
  j--;
}
if(cp)
  r[k--]=cp;
for(k=k+1;k<N;k++)
  printf("%d",r[k]);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值