/*
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;
}
高精度算法之高精度加法
最新推荐文章于 2024-03-25 18:07:58 发布