大正数相加

简介: #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;
} 
				  

 

目录
相关文章
|
5月前
|
存储 C++
两数相加(C++)
两数相加(C++)
40 0
|
5天前
两个整数相加
【10月更文挑战第12天】两个整数相加
13 5
|
4天前
两数相除,如果有余数,输出余数
【10月更文挑战第13天】两数相除,如果有余数,输出余数。
18 4
|
4月前
2.两数相加
2.两数相加
|
5月前
|
C++
各位相加(C++)
各位相加(C++)
31 1
|
5月前
|
算法 Python
计算32位二进制整数中1的个数(包括负数补码)
计算32位二进制整数中1的个数(包括负数补码)
106 0
|
机器学习/深度学习
什么是浮点数加减运算里的对阶,阶码和尾数
什么是浮点数加减运算里的对阶,阶码和尾数
一个数字的二进制数字里的一的个数(负数用补码)
这是一种解决问题的函数,缺点,会有死循环,((int)pow(-2, i))这个值的结果是整形永远达不到那个数字2147483648,我们必须自己规定那个数字
47 0
|
存储
5.3.2_原补码的除法运算
计算机组成原理之原补码的除法运算
317 0
5.3.2_原补码的除法运算
35.数值的整数次方
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方
48 0
35.数值的整数次方