C语言编程:用一个数组表示一个正整数,一个数组元素表示整数的一位,例如396可以用数组表示

用一个数组表示一个正整数,一个数组元素表示整数的一位,例如396可以用数组表示A[0]=6,A[1]=9,A[2]=3,编写一个函数计算这样表示的两个整数A和B,之和存放在数组C中。注:假定不会超过100位。请用指针的方法解答,我只知道用三个指针分别指向A B C三个数组,但是进位怎么处理,请大家帮忙 关键是进位怎么处理的,谢谢。看到您的答案,但是没有看懂,如果有时间可以写个注释么?不胜感激

望采纳

#include<stdio.h>
int flag=0;//进位标志,1代表进位
int num=0;//递归次数
void fun(int *a,int *b,int *c)//递归函数
{
if(num==99)
return;
int m=*a+*b+flag;
*c=m%10;
if(m>9)
flag=1;
else
flag=0;
num++;
fun(++a,++b,++c);
return;
}
int main()
{
int c[100]={};
int a[100]={2,5,8,6,9,1,4,5,8,6,3,4,8,9,5,6,7,8,9,1};
int b[100]={8,6,9,4,2,8,3,5,7,9,2,5,6,8,1,9,2,8,5,7,8,9,6,1,7,2,3};//a[0]is low and the other is high
fun(a,b,c);
int i;
int flag2=0;//标志
for(i=99;i>=0;i--)//从不为0的位开始输出
{
if(flag2==0)
{
if(c[i])
{
flag2=1;
printf("%d",c[i]);
}
}
else
{
printf("%d",c[i]);
}
}
printf("\n");
return 0;
}追问

请问从flag2=0开始的代码是什么意思呢?另外a和b数组计算时不用反置过来后在相加么?

追答

ab数组低位代表数字的低位,即a[0]代表个位,相加就是从低位向高位进位,所以不用反置数组了;
flag就是个标志,初始化为0,从后往前遇到一个不为0的数时就让flag位1,然后依次打印数组

追问

int flag2=0;//标志
for(i=99;i>=0;i--)//从不为0的位开始输出
{
if(flag2==0)
{
if(c[i])
{
flag2=1;
printf("%d",c[i]);
}
}
else
{
printf("%d",c[i]);
}
}
printf("\n");
return 0;
}
这部分flag2还是作为进位标志么?还是没太明白这部分的意思

追答

flag2就是标志有没有读到第一个非0位了,flag2为0就是没有读到非0位,反之就读到第一个非0位,然后条件if(flag2==0)不成立,依次从高位往低位打印数组,其实这段代码就是把数组高位的0去掉

温馨提示:答案为网友推荐,仅供参考
相似回答