高精度加法:
void jiafa(char *a,int lena,char *b,int lenb,char *res)
{
int i=lena-1,j=lenb-1,k=0;
while((i+1)||(j+1))
{
if(i!=-1)res[k]+=(int)(a[i--]-'0');
if(j!=-1)res[k]+=(int)(b[j--]-'0');
res[k+1]+=res[k]/10;
res[k++]%=10;
}
while(!res[k]&&k>1)k--;
if(res[k])k++;
res[k]=0;
for(int s=k-1; s>=0; s--)
res[s]+='0';
for(int s=0; s
高精度乘法:
void chengfa(char *a,int lena,char *b,int lenb,char *res)
{
int k=0;
for(int i=0;i9)
{
res[i+j+1]+=res[i+j]/10;
res[i+j]%=10;
if(i+j+1>k)k=i+j+1;
}
else if(res[i+j]&&i+j>k)k=i+j;
}
for(int s=k; s>=0; s--)
res[s]+='0';
for(int s=0;s
高精度减法:
void jianfa(char *a,int lena,char *b,int lenb,char *res)
{
int ans[205];
memset(ans,0,sizeof(ans));
int i=lena-1,j=lenb-1,k=0;//a>b
while((i+1)||(j+1))
{
if(j!=-1)ans[k]+=a[i--]-b[j--];
else ans[k]+=a[i--]-'0';
if(ans[k]=1)k--;
for(int s=k; s>=0; s--)
res[s]=ans[s]+'0';
for(int s=0; s