#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void add(char *a, char *b)
{
char *ret,*array_a,*array_b;
int lena,lenb,len_small,len_big,i,tmp = 0;/*tmp表示是否有进位*/
if(a == NULL || b == NULL)
return;
lena = strlen(a);
lenb = strlen(b);
len_small = (lena > lenb) ? lenb:lena;
len_big = (lena < lenb) ? lenb:lena;
if ((array_a = malloc(lena)) == NULL)
goto out;
for(i = 0; i < lena; i++)
{
array_a[lena - i - 1] = a[i] - '0';
}
if ((array_b = malloc(lenb)) == NULL)
goto out;
for(i = 0; i < lenb; i++)
{
array_b[lenb - i - 1] = b[i] - '0';
}
ret = malloc(len_big + 1);
if(ret == NULL)
goto out;
/*把低位相加*/
for(i = 0; i < len_small; i++)
{
tmp += array_a[i] + array_b[i];
ret[i] = (tmp % 10) + '0';
tmp = tmp / 10;
}
/*如果有高位的话,在把高位相加*/
if(lena > lenb)
{
for(i; i < len_big; i++)
{
tmp += array_a[i];
ret[i] = (tmp % 10) + '0';
tmp = tmp / 10;
}
}
else
{
for(i; i < len_big; i++)
{
tmp += array_b[i];
ret[i] = (tmp % 10) + '0';
tmp = tmp / 10;
}
}
if(tmp)/*如果最后有进位*/
ret[i] = tmp + '0';
else
i--;
/*从高位开始打印*/
for(i; i >= 0 ; i--)
{
printf("%c",ret[i]);
}
printf("\n");
out:
if (array_a)
free(array_a);
if(array_b)
free(array_b);
if(ret)
free(ret);
}
int main(int argc, char *argv[])
{
char *a = "55552342423535345";
char *b = "55555";
add(a ,b);
return 0;
}
两个都是数字的字符串求和
最新推荐文章于 2023-10-09 20:02:04 发布