开发者俱乐部
标题:
高精度加法
[打印本页]
作者:
balala
时间:
2016-8-4 22:22
标题:
高精度加法
#include <stdio.h>
#include <string.h>
#include <malloc.h>
#include <stdlib.h>
void add(char a[], char b[]);
void main(void)
{
char f;
char a[200], b[200];
scanf("%s", &a);
scanf("%s", &f);
scanf("%s", &b);
if(f=='+')
{
printf("加法运算:\n");
add(&a, &b);
}
}
//加法
void add(char a[], char b[])
{
int la=strlen(a), lb=strlen(b);
int ls, i, rem=0;
int *pa=(int*)malloc(sizeof(int)*la);
int *pb=(int*)malloc(sizeof(int)*lb);
int *ps;
(la>lb)?(ls=la):(ls=lb);
ps=(int*)malloc(sizeof(int)*ls);
for(i=0;i<la;i++)
{
pa[i]=a[i]-48;
}
for(i=0;i<lb;i++)
{
pb[i]=b[i]-48;
}
i=0;
while(la>0 && lb>0)
{
int sum=pa[la-1]+pb[lb-1];
ps[i]=rem+(sum%10);
rem=0;
if(sum>9)
rem=sum/10;
i++;
la--;
lb--;
}
if(la>0)
{
while(la>0)
{
int sum=rem+pa[la-1];
ps[i]=sum%10;
rem=0;
if(sum>9)
rem=sum/10;
i++;
la--;
}
}else
if(lb>0)
{
while(lb>0)
{
int sum=rem+pb[lb-1];
ps[i]=sum%10;
rem=0;
if(sum>9)
rem=sum/10;
i++;
lb--;
}
}
if(rem>0)
{
ps[i]=rem;
i++;
}
printf("和为:\n");
while(i>0)
{
printf("%d", ps[i-1]);
i--;
}
printf("\n");
}
复制代码
欢迎光临 开发者俱乐部 (http://xodn.com/)
Powered by Discuz! X3.2