大正数相加
#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; }
作者:火星十一郎
本文版权归作者火星十一郎所有,欢迎转载和商用,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.