大正数相加

简介: #include #include int len; void plus(int a[],int b[]) { int i; len=a[0]>b[0]?a[0]:b[0]; for(i=1;i=10) { a[i+1]++; a[i]...
#include<stdio.h> 
#include<string.h> 
int len;
void plus(int a[],int b[])
{ 
	int i;
	len=a[0]>b[0]?a[0]:b[0]; 
	for(i=1;i<=len;i++) 
	{
		a[i]+=b[i]; 
		if(a[i]>=10) 
		{ 
			 a[i+1]++; 
			 a[i]=a[i]%10;
		} 
	} 
	if(a[len+1]!=0)
		len++;//a[0]是加数的长度 a[0]=len; 
}
int main() 
{ 
	int i;
	char str1[401],str2[401];
	int a[401]={0},b[401]={0},c[403]={0}; 
	while(1) 
	{ 
		memset(str1,0,sizeof(str1));
		memset(str2,0,sizeof(str2));
		if(gets(str1)==NULL||gets(str2)==NULL)//不是EOF 
			break;
		a[0]=strlen(str1); 
		for(i=a[0];i>=1;i--) 
			a[i]=str1[a[0]-i]-'0';
		/*
		for(i=1;i<=a[0];i++)
			printf("%d   ",a[i]);
		putchar('\n');
		*/
		for(i=0;i<=a[0];i++) 
			c[i]=a[i];
		b[0]=strlen(str2); 
		//逆序,也就是说,最低位在 a[1] 
		for(i=b[0];i>=1;i--) 
			b[i]=str2[b[0]-i]-'0';
		plus(a,b); 
		for(i=c[0];i>=1;i--)//用c[i]不用a[i]是因为a[i]已经变化 
			printf("%d",c[i]); 
		printf(" + "); 
		for(i=b[0];i>=1;i--) 
			printf("%d",b[i]);//b[i]未变,此处可以继续用,不用一开始设置临时变量
		printf(" = ");
		for(i=len;i>=1;i--)
			printf("%d",a[i]); 
		putchar('\n'); 
		memset(a,0,sizeof(a));
		memset(b,0,sizeof(b));
		memset(c,0,sizeof(c));
	}
	return 0;
} 
				  

 

目录
相关文章
|
7月前
|
存储 C++
两数相加(C++)
两数相加(C++)
48 0
|
2月前
适用正数和负数
【10月更文挑战第21天】适用正数和负数。
29 2
|
2月前
使用正数和负数
【10月更文挑战第19天】使用正数和负数。
34 2
|
2月前
两个整数相加
【10月更文挑战第12天】两个整数相加
22 5
|
2月前
两数相除,如果有余数,输出余数
【10月更文挑战第13天】两数相除,如果有余数,输出余数。
40 4
|
6月前
2.两数相加
2.两数相加
|
7月前
|
存储 弹性计算 运维
对100 以内的所有正整数相加求和
【4月更文挑战第29天】
86 2
|
7月前
|
C++
各位相加(C++)
各位相加(C++)
34 1
|
存储 Rust 算法
两数相加
两数相加
163 0
两数相加
11:计算浮点数相除的余数
11:计算浮点数相除的余数
299 0