大数相加(完成),相减(未完成)
相加
void revert(char *a,char *b) { int len_a=strlen(a); int len_b=strlen(b); for(int i=0;i<len_a/2;i++) { char temp=a[i]; a[i]=a[len_a-1-i]; a[len_a-1-i]=temp; } for(int i=0;i<len_b/2;i++) { char temp=b[i]; b[i]=b[len_b-1-i]; b[len_b-1-i]=temp; } } void add(char *a,char *b,int *c) { int len_a=strlen(a); int len_b=strlen(b); if(len_a>len_b) c=(int *)malloc(sizeof(int)*(len_a+1)); else c=(int *)malloc(sizeof(int)*(len_b+1)); int i=0; int j=0; int k=0; int carry=0; while(i<len_a&&j<len_b) { int temp=a[i++]-'0'+b[j++]-'0'+carry; c[k++]=temp%10; carry=temp/10; } while(i<len_a) { int temp=a[i++]-'0'+carry; c[k++]=temp%10; carry=temp/10; } while(j<len_b) { int temp=b[j++]-'0'+carry; c[k++]=temp%10; carry=temp/10; } for(i=0;i<k;i++) printf("%d",c[k-1-i]); printf("\n"); }
相减
void delete(char *a,char *b,int *c) { int len_a=strlen(a); int len_b=strlen(b); if(len_a>len_b) c=(int *)malloc(sizeof(int)*(len_a+1)); else c=(int *)malloc(sizeof(int)*(len_b+1)); int i=0; int j=0; int k=0; int carry=0; // while(i<len_a&&j<len_b) // { // int temp=a[i++]-'0'-(b[j++]-'0')-carry; // if(temp>=0) // { // c[k++]=temp; // carry=0; // } // else // { // carry=1; // c[k++]=-temp; // } // } while(i<len_a&&j<len_b) { if(a[i]<b[j]) { c[k++]=a[i++]-b[j++]+10; if(i==len_a&&j==len_b) { c[k-1]=c[k-1]-10; } else { a[i]--; } // printf("%d\n",a[i]-'0'); } else { c[k++]=a[i++]-b[j++]; } // printf("%d\n",c[k-1]); } printf("第一步\n"); for(i=0;i<k;i++) printf("%d",c[k-1-i]); printf("\n"); while(i<len_a) { c[k++]=a[i++]-'0'; } while(j<len_b) { c[k++]=b[j++]-'0'+10; b[j]--; } // while(i<len_a) // { // int temp=a[i++]-'0'-carry; // if(temp>=0) // { // c[k++]=temp; // carry=0; // } // else // { // carry=1; // c[k++]=-temp; // } // } // while(j<len_b) // { // int temp=b[j++]-'0'-carry; // if(temp>=0) // { // c[k++]=temp; // carry=0; // } // else // { // carry=1; // c[k++]=-temp; // } // } // if(carry==1) // c[k-1]=c[k-1]*(-1); for(i=0;i<k;i++) printf("%d",c[k-1-i]); printf("\n"); }