#include <stdio.h>
#include <iostream>
#include <memory.h>
#include <math.h>
using namespace std;
#define MI 1000
/*****************high precision computation********************/
int hpcAdd(char* a,char* b,int lena,int lenb,char *re)
{
memset(re,0,MI);
char rest=0;
char tmp=0;
int len=max(lena,lenb);
int i;
for(i=0;i<len;i++)
{
tmp=a[i]+b[i]+rest;
re[i]=tmp%10;
rest=tmp/10;
}
if(rest>0)
{
len++;
re[len-1]=rest;
}
return len;
}
int hpcMui(char* a,char* b,int lena,int lenb,char *re)
{
memset(re,0,MI+MI);
char rest=0;
char tmp=0;
int len;
int i,j,l;
for(i=0;i<lena;i++)
{
for(j=0;j<lenb;j++)
{
tmp=a[i]*b[j];
re[i+j]+=tmp%10;
re[i+j+1]+=tmp/10;
l=i+j;
while(re[l]>=10)
{
re[l]=re[l]%10;
tmp=re[l]/10;
re[++l]+=tmp;
}
}
}
for(i=MI*2-1;i>=0;i--)
{
if(re[i]!=0)
{
break;
}
}
i++;
len=i;
cout<<len<<endl;
return len;
}
char turnUpsideDown(char* a,int lena)
{
//数组逆置
int i;int j;char t;
i=0;
j=lena-1;
while(i<j)
{
t=a[i];
a[i]=a[j];
a[j]=t;
++i;
--j;
}
return 0;
}
char turntooutput(char *a,int len)
{
int i;
for(i=0;i<len;++i)
{
a[i]+=48;
}
}
int main()
{
cout<<"Input the two number:";
char tina[MI],tinb[MI];
char a[MI];
char b[MI];
char aAdd[MI];
int ladd;
char aMui[MI+MI];
int lmui;
memset(a,0,MI);
memset(b,0,MI);
int lena,lenb;
cin>>tina>>tinb;
cout<<endl; //一次性读入用户输入的数据
int i,j;
char t;
i=0;
j=0;
//解析数据
while( 48<=tina[i] && tina[i]<=57 && i<MI)
{
a[i]=tina[i]-48;
++i;
}
lena=i;
while( 48<=tinb[j] && tinb[j]<=57 && i<MI)
{
b[j]=tinb[j]-48;
++j;
}
lenb=j;
turnUpsideDown(a,lena); //数组逆置
turnUpsideDown(b,lenb); //数组逆置
ladd=hpcAdd(a,b,lena,lenb,aAdd);
lmui=hpcMui(a,b,lena,lenb,aMui);
turnUpsideDown(aAdd,ladd);
turntooutput(aAdd,ladd);
turnUpsideDown(aMui,lmui);
turntooutput(aMui,lmui);
cout<<aAdd<<endl<<aMui<<endl;
return 0;
}
c++高精度运算(加、乘)
最新推荐文章于 2024-07-15 07:46:14 发布