C语言用字符串实现整数的加法

这是C语言试题上的,请不要给我C++的直接调用的函数,就用C语言的基础知识自己写函数。
编写函数void AddBigInt(char *result,char *str1,*str2),该函数求用str1和str2表示的两个整数的和,将结果放在result中。

大家就不要直接复制网上的四则运算那个了,我看了一晚上没弄懂,最好用比较简单的方式实现(不要涉及太高深的C语言知识,笨一点没关系,这个是学完数组和指针后的题目,估计与数组和指针这部分有关系)

这个问题你可以写两个小函数来实现 , 一个是atoi()函数,就是把字符串转化成int型,另一个是itoa(),就是把int型的数字转化成字符串。刚开始时用atoi()把str1,str2转化成整形数,然后相加,再把相加后的结果用itoa()函数转化成字符串,再赋值给result。这是个思路,那两个函数也不太难,自己尝试实现一下。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-11-16
思路:
1. 获得两个字符串长度
2.两个字符串从末尾开始往前,分别去一个字符
3.字符-'0' 得到数值,相加,记录进位x, 与该位结果
4.往前一位取字符,重复3操作,另外+x, 然后再记录进位 与该位结果
5.最后直到各位置遍历完毕
第2个回答  2011-11-16
核心应该是实现字符到整数型的变化 字符 - '0' 就得到相应的数字了
第3个回答  推荐于2018-03-29
void AddBigInt(char *result,char *str1,char *str2)
{
int i,a,b,c;
int x = 0;
char c1,c2;
for(i = 0;;i++)
{
if(*(str1 + i) == '\0')
{
a = i - 1;
break;
}
}
for(i = 0;;i++)
{
if(*(str2+i) == '\0')
{
b = i - 1;
break;
}
}
if(a > b)
c = a + 1;
else
c = b + 1;
*(result + c + 1) = '\0';
for(i = 0;c >= i;i++)
{
if(a < i)
c1 = '0';
else
c1 = *(str1 + a - i);
if(b < i)
c2 = '0';
else
c2 = *(str2 + b - i);
*(result + c - i) = ( c1 - '0' + c2 - '0' + x) % 10 + '0';
x = ( c1 - '0' + c2 - '0' + x) / 10 ;
}
if(*result == '0'){
for(i = 0;*(result + i);i++)
*(result + i) = *(result + i+1);
}
}
//VC6.0测试通过追问

兄弟,麻烦你把主函数一起发过来吧,我这里运行有点问题,好像是头文件出错,我用的vc6.0绿色版。

追答

#include

void AddBigInt(char *result,char *str1,char *str2)
{
int i,a,b,c;
int x = 0; //进位值,初始为0
char c1,c2;

for(i = 0;;i++) //计算str1/str2的长度
{
if(*(str1 + i) == '\0')
{
a = i - 1;
break;
}
}
for(i = 0;;i++)
{
if(*(str2+i) == '\0')
{
b = i - 1;
break;
}
}

if(a > b) //result的最大可能长度为str1/str2中长度最大者+1
c = a + 1;
else
c = b + 1;
*(result + c + 1) = '\0'; //添加字符串结束标志

for(i = 0;c >= i;i++) //由后往前计算result对各位的值,直到得出*result的值
{
if(a < i)
c1 = '0'; //该字符串中不存在该位则取'0'值,下同
else
c1 = *(str1 + a - i); //将str1的各位依次赋给c1,下同

if(b < i)
c2 = '0';
else
c2 = *(str2 + b - i);
//计算对应位
*(result + c - i) = ( c1 - '0' + c2 - '0' + x) % 10 + '0';
x = ( c1 - '0' + c2 - '0' + x) / 10 ;
}

if(*result == '0') //如果result的第一位为'0',则去掉该位
{
for(i = 0;*(result + i);i++)
*(result + i) = *(result + i+1);
}
}

int main(void)
{
char str1[200],str2[200],result[200];

printf("Input str1:");
gets(str1);
printf("Input str2:");
gets(str2);

AddBigInt(result, str1,str2);
printf("result:%s\n",result);
return 0;
}

本回答被提问者和网友采纳
相似回答