P1255
作者:互联网
大数加法常通过字符串处理
#include<stdio.h> #include<string.h> void bigadd(void); char final[5007]; char temp[5007]; char bridge[5007]; int len; int main() { int n; scanf("%d",&n); for(int i=0;i<5007;i++) final[i]='\0',temp[i]='\0',bridge[i]='\0'; temp[0]='1'; final[0]='2'; if(n!=0&&n!=1) { for(int i=0;i<n-2;i++) bigadd(); for(int i=0;i<len;i++) printf("%c",final[i]); } else if(n==0) printf("0"); else if(n==1) printf("1"); return 0; } void bigadd(void) { int len1=strlen(temp); int len2=strlen(final); int a1[5007],b1[5007]; int result[5007]; for(int i=0;i<5007;i++) { result[i]=0; a1[i]=0; b1[i]=0; } for(int i=0;i<len2;i++) bridge[i]=final[i]; //倒序存储(低位在前高位在后) for(int i=len1-1,j=0;i>=0;i--,j++) a1[i]=temp[j]-'0'; for(int i=len2-1,j=0;i>=0;i--,j++) b1[i]=final[j]-'0'; int judge=(len1>len2)?len1:len2; if(a1[0]+b1[0]<10) result[0]=a1[0]+b1[0]; else { result[0]=a1[0]+b1[0]-10; result[1]=1; } for(int i=1;i<judge;i++) { if(a1[i]+b1[i]+result[i]<10) result[i]=a1[i]+b1[i]+result[i]; else { result[i]=result[i]+a1[i]+b1[i]-10; result[i+1]=1; } } //转化成字符型 int flag; (result[judge]==0)?(flag=0):(flag=1); if(flag) for(int i=judge,j=0;i>=0;i--,j++) final[i]=result[j]+48; else for(int i=judge-1,j=0;i>=0;i--,j++) final[i]=result[j]+48; // printf("%s",final); for(int i=0;i<len2;i++) temp[i]=bridge[i]; len=strlen(final); }
标签:P1255,len2,int,++,char,--,final 来源: https://www.cnblogs.com/gyq1314520/p/14422551.html