user-0 提问: 如何用数组来模拟加法的进位？？

回复:
user: user-1
content: int add (int *a1 ,int *a2 ,int *s) { 	int i ; 	int carr ,temp ;  	carr = 0 ; 	for (i = 9 ; i >= 0 ; i--) 	{ 		temp = a1[i] + a2[i] + carr ; 		s[i] = temp % 10 ; 		carr = temp / 10 ; 	}  	return 0 ; }  两位数相加的结果还要加上进位 ,结果为对10取余 ,进位为除与10 话说计算机就适合计算2进制 ,先换成2进制计算然后换回去 ,效率会高很多

user: user-2
content: 引用 8 楼 lm_whales 的回复:[quote=引用 7 楼 u011728480 的回复:] 可以实现，但是我不知道我的算法好不： 我的想法是这样的：int型数组，初始化每个为零，从零开始，遍历数组，依次判断是否满足次位是否大于=10  先实现一个正确的，可用的，算法可以慢慢调整。 实际上， char 数组就足够了。[/quote]   确实是这样的。只要先可行，算法可以优化/////////////

user: user-3
content: 引用 7 楼 u011728480 的回复:可以实现，但是我不知道我的算法好不： 我的想法是这样的：int型数组，初始化每个为零，从零开始，遍历数组，依次判断是否满足次位是否大于=10  先实现一个正确的，可用的，算法可以慢慢调整。 实际上， char 数组就足够了。

user: user-2
content: 可以实现，但是我不知道我的算法好不： 我的想法是这样的：int型数组，初始化每个为零，从零开始，遍历数组，依次判断是否满足次位是否大于=10

user: user-4
content: 仅供参考#include <stdio.h> #include <string.h> #define MAXLEN 1000 char a1[MAXLEN]; char a2[MAXLEN]; static int v1[MAXLEN]; static int v2[MAXLEN]; static int v3[MAXLEN]; int i,j,n,L,z; void main(void) {     scanf("%d",&n);     for (j=0;j<n;j++) {         scanf("%s%s",a1,a2);          L=strlen(a1);         for (i=0;i<L;i++) v1[i]=a1[L-1-i]-'0';          L=strlen(a2);         for (i=0;i<L;i++) v2[i]=a2[L-1-i]-'0';          for (i=0;i<MAXLEN;i++) v3[i]=v1[i]+v2[i];          for (i=0;i<MAXLEN;i++) {             if (v3[i]>=10) {                 v3[i+1]+=v3[i]/10;                 v3[i]=v3[i]%10;             }         }          printf("Case %d:\n", j+1);         printf("%s + %s = ", a1, a2);          z=0;         for (i=MAXLEN-1;i>=0;i--) {             if (z==0) {                 if (v3[i]!=0) {                     printf("%d",v3[i]);                     z=1;                 }             } else {                 printf("%d",v3[i]);             }         }         if (z==0) printf("0");          printf("\n");     } } //Sample Input //3 //0 0 //1 2 //112233445566778899 998877665544332211 // //Sample Output //Case 1: //0 + 0 = 0 //Case 2: //1 + 2 = 3 //Case 3: //112233445566778899 + 998877665544332211 = 1111111111111111110

user: user-5
content: #include <stdio.h>  void main() { 	unsigned char Sum[10] = {0,0,2,6,0,2,3,4,0,0};  //43206200     被加数，  低位在前 	unsigned char Add[10] = {7,5,9,8,0,0,0,0,0,0};  //8957    加数，低位在前 	int i,active,c,temp;  	active = 10; 	while((Add[active-1] == 0) && active != 0)			//查找Add数据内有效数据位(找到最高位是第几位就知道了),这里是4 		active--;  	c = 0;								//第一次是最低位相加，进位标志是0 	for(i=0; i<active; i++) 	{ 		temp = Sum[i] + Add[i] + c;		//带上一次计算进位标志加法 		c = temp/10; 		Sum[i] = temp%10; 	}  	Sum[i] += c;		//最后一次进位，在这里补回来  	  	active = 10; 	while((Sum[active-1] == 0) && active != 0)		//计算Sum内有效数据位   		active--;  	for(i=active; i >= 0; i--)				//显示有效数据 		printf("%c",Sum[i-1]+'0');  	printf("\n"); }

user: user-3
content: 最简单的就是，和小学数学的竖式计算那样           A  B  C   D +      E   F  G   H              1   1 ------------------------         W   Z   Y    X        //和需要 进位，和减10，进位位置为1， 不进位保留原和，进位位置为0

user: user-6
content: 引用 1 楼 linghuazaii 的回复:正常的话 应该是两个数据输入为两个数组 然后一个结果输出为一个结果 然后进位输出作为一个数组 其实门电路设计的时候也就是这样处理进位问题的 不过没有用一个数组来存 只是用一个锁存器来存进位信号或者溢出信号 楼主不是问的全加器的实现吧。。虽然原理差不多，但他的意思应该是高精度整数算法

user: user-7
content: 如果只是要实现模拟所有大数的话，从高位到低位嵌套0~9的for循环就好了。 要实现两个数组代表的大数相加的话，就各位相加，和除以10的商加到高位去，余数成为新的低位。

user: user-8
content: 正常的话 应该是两个数据输入为两个数组 然后一个结果输出为一个结果 然后进位输出作为一个数组 其实门电路设计的时候也就是这样处理进位问题的 不过没有用一个数组来存 只是用一个锁存器来存进位信号或者溢出信号