高精度算法之高精度加法

/*
Name: 高精度算法
Copyright:
Author: 赵晨泽
Date: 02/07/20 09:00
Description:
*/
#include
#include
using namespace std;
int *input(char a1[],int lena);//读入数据
int *add(int a[],int b[],int lena,int lenb);//高精度加法
void print(int a[]);
int main( )
{
char a1[256]={}, b1[256]={};
int *a=NULL ,*b=NULL,*c=NULL;
int lena,lenb,lenc;
cout<<“读入数据\n”;
gets(a1);//读入a
gets(b1);//读入b
lena = strlen(a1);
lenb = strlen(b1);
/数据储存/
a = input(a1,lena);
b = input(b1,lenb);
/数据输出/
print(a);
cout<<endl;
print(b);
cout<<"\n";
/高精度加法/
c = add(a,b,lena,lenb);
print©;
return 0;
}
int *input(char a1[],int lena)//读入数据
{
int *a = new int[256];
a[0]=lena;
for( int i=0; i<= lena-1; i++)
{
a[lena-i] = a1[i] - 48;// 将字符串中存放数字的高位存放在数组中的高位
}
return a;
}
void print(int a[])
{
for (int i = a[0]; i >=1;i–)//从高位开始向低位输出
{
cout << a[i]<<" ";
}
}
int *add(int a[],int b[],int lena,int lenb)//高精度加法
{
int lenc = 1;//lenc是和的位数,c[]的位数
int x=0;// x存储进位的值
int *c = new int[256];
while (lenc <= lena || lenc <= lenb)
{
c[lenc] = a[lenc] + b[lenc] + x;//从低位开始加起,c[i]=a[i]+b[i]
x = c[lenc] / 10;
c[lenc] %= 10;
lenc++;
}
c[lenc] = x;//c[lenc]= =最后一次相加的进位
if(c[lenc] = = 0)//如果进位为0,那么说明不需要进位
{
lenc-- ;
}
c[0]=lenc;
return c;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NOI_赵小龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值