兩個很大的整數--超過了INT_MAX,它們怎么做加法呢?把它們當作字符串,逐位進行相加嘍。
#include<stdio.h> #include<string.h> #include<stdlib.h> char* add(const char *arr,const char *brr){ int lena=strlen(arr); int lenb=strlen(brr); int maxlen=(lena<lenb)?lenb:lena; char* sum=(char*)malloc(maxlen+2); memset(sum,'0',maxlen+1); sum[maxlen+1]=0; int c=0; while(lena-->0 && lenb-->0){ int left=arr[lena]-'0'; int right=brr[lenb]-'0'; int s=left+right+c; c=s/10; s%=10; sum[maxlen--]=s+'0'; } if(lena<=0){ while(lenb-->0){ int left=0; int right=brr[lenb]-'0'; int s=left+right+c; c=s/10; //C是進位 s%=10; sum[maxlen--]=s+'0'; } } else if(lenb<=0){ while(lena>0){ int left=arr[lena]-'0'; int right=0; int s=left+right+c; c=s/10; s%=10; sum[maxlen--]=s+'0'; lena--; } } sum[maxlen]=c+'0'; return sum; } main(){ char *left="74174616164496"; char *rit="936259678473525"; char *sum=add(left,rit); size_t pos=strspn(sum,"0"); //路過開頭連續的‘0’ printf(" %25s\n+%25s\n=%25s\n",left,rit,sum+pos); free(sum); }