// abbey.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "stdio.h"
#include "string.h"
int max(int a,int b)
{
return a>b?a:b;
}
int min(int a,int b)
{
return a<b?a:b;
}
int main()
{
const int maxn=1005;
//输入存储
char s1[maxn],s2[maxn];
//对应的int值
int i1[maxn],i2[maxn];
int i3[maxn];
//初始化
memset(s1,0,sizeof(s1));
memset(s2,0,sizeof(s2));
memset(i1,0,sizeof(i1));
memset(i2,0,sizeof(i2));
memset(i3,0,sizeof(i3));
scanf("%s %s",s1,s2);
int len1=strlen(s1);
int len2=strlen(s2);
int lenmin=min(len1,len2);
int lenmax=max(len1,len2);
int i;
//char to int
for (i=0;i<len1;i++)
{
i1[i]=s1[i]-48;
}
for (i=0;i<len2;i++)
{
i2[i]=s2[i]-48;
}
//从低位到高位的加法
for (i=0;i<lenmin;i++)
{
i3[i]=i3[i]+i1[len1-i-1]+i2[len2-i-1];
i3[i+1]=i3[i+1]+i3[i]/10;
i3[i]=i3[i]%10;
}
//处理位数不相等的情况
//和上面单独分开可以避免数组越界问题
if (i==len1)
{
for (i=len1;i<len2;i++)
{
i3[i]=i3[i]+i2[len2-i-1];
i3[i+1]=i3[i+1]+i3[i]/10;
i3[i]=i3[i]%10;
}
}
else if (i==len2)
{
for (i=len2;i<len1;i++)
{
i3[i]=i3[i]+i1[len1-i-1];
i3[i+1]=i3[i+1]+i3[i]/10;
i3[i]=i3[i]%10;
}
}
//去除前导0
for (i=lenmax;i>=0;i--)
{
if (i3[i]!=0)
{
break;
}
}
//反序输出
for (;i>=0;i--)
{
printf("%d",i3[i]);
}
printf("\n");
return 0;
}
c高精度加法模板
最新推荐文章于 2022-11-10 01:08:03 发布