#include
#include
#include
#define max(a,b) (a)>(b)?(a):(b)
int big_add(char*,char*,char*);
int big_compare(char*,char*,int*);
int is_number_string(char*);
int main()
{
char num1[80],num2[80],num3[100];
puts("First number:");
gets(num1);
puts("Second number:");
gets(num2);
if(big_add(num1,num2,num3))
{
puts("Sum:");
puts(num3);
}
else
puts("Input error!");
return 0 ;
}
int big_add(char num1,char *num2, char *sum)
{
if(is_number_string(num1)&&is_number_string(num2))
{
int len1=strlen(num1),len2=strlen(num2),c=0;
int len=max(len1,len2)+1;
char *res=(char)malloc((len+1)*sizeof(char));
memset(res,0x30,len*sizeof(char));
res[len]=0;
for(;len>0;len1--,len2--)
{
len--;
len1>0&&(res[len]+=num1[len1-1]-0x30);
len2>0&&(res[len]+=num2[len2-1]-0x30);
res[len]+=c;
if(res[len]>0x39)
{
res[len]-=0xa;
c=1;
}
else
c=0;
}
res[len]+=c;
while(!(*res-0x30))
res++;
strcpy(sum,res);
return(1);
}
return(0);
}
int big_compare(char *num1,char *num2,int *result)
{
if(is_number_string(num1)&&is_number_string(num2))
{
int len1=strlen(num1),len2=strlen(num2);
if(len1==len2)
{
while(*num1++==*num2++);
*result=*num1-*num2;
}
else
*result=len1-len2;
return(1);
}
else
return(0);
}
int is_number_string(char *str)
{
for(;*str;str++)
if(*str<'0'||*str>'9')
return(0);
return(1);
}
c/c++大数相加原理就是把数当成字符串,然后做运算时,一个字符一个字符的取出,转成数值。进行运算。最后再把结果一个一个的存入到另一个字符串中去。
无非就是作为字符串,然后按照人笔算的流程去计算
big_add
这是加法
for(;len>0;len1--,len2--)
从字符串的后面往前运算,类似我们笔算,从低位到高位算
if(res[len]>0x39)
这里是进位,0x39就是ascii的'9'
big_compare
比较
is_number_string
判断输入的是不是全部都是数字
再不会,去买一本小学数学书,原理、流程上面都有。