求两个长长整型的数据的和并输出。
例如输入2222222222222222222222222 ,99999999999999999999999999999999999999999999
则输出...
void movenegative(char *str,int len)
{
if(*str!='-')//if no nagative flag
return;
else
{
int i=0;
for(;i<len;i++)
*(str+i)=*(str+i+1);
*(str+i)='\0';//the terminal of the string
}
}
void stringadd(char *str1,char *str2,char *result)
{
char *string1=str1;//先暂且考虑两个正数
char *string2=str2;
char *t=result;
char *stringg;
int len1=strlen(str1);
int len2=strlen(str2);
char *str11=(char*)malloc(sizeof(char)*len1);
char *str22=(char*)malloc(sizeof(char)*len2);
movenegative(str1,strlen(str1));
movenegative(str2,strlen(str2));
for(int i=0;i<len1;i++)
{
*(str11+i)=*(string1+len1-i-1);
}
for(int i=0;i<len2;i++)
{
*(str22+i)=*(string2+len2-i-1);
}
int flag=0;
int temp=0;
int realvalue=0;
int len=(strlen(str1)<strlen(str2))?strlen(str1):strlen(str2);
int reallen=(strlen(str1)>strlen(str2))?strlen(str1):strlen(str2);
for(int i=0;i<len;i++)
{
temp=*(str11+i)+*(str22+i);
realvalue=temp-2*'0'+flag;//真实值
*t++=realvalue%10+'0';
if(realvalue>=10)
flag=1;
else
flag=0;
}
if(len1>len2)
stringg=str1;
else
stringg=str2;
if(reallen>len)
for(int i=0;i<reallen-len;i++)
{
if(flag==1)
{
int temp=*(stringg+reallen-len-i-1);
int real=temp-'0'+flag;
if(real>=10)
{
flag=1;
*t++=real%10+'0';
}
else
{
*t++=*(stringg+reallen-len-i-1)+flag;
flag=0;
}
}
else
{
*t++=*(stringg+reallen-len-i-1);
}
}
if(flag==1)
{
*t++=1+'0';
reallen++;
}
for(int i=0;i<=(reallen-1)/2;i++)//翻转计算结果
{
temp=*(result+i);
*(result+i)=*(result+reallen-i-1);
*(result+reallen-i-1)=temp;
}
*t='\0';
}