#include <stdio.h>
#include <string.h>
#define max 220
struct bigint{
int digit[max/4],size;
void init(){
size = 0;
for(int i=0;i<max;i++){
digit[i] = 0;
}
}
void set(char *a){
init();
int sl = strlen(a),j=0,k=1,t=0;
for(int i=sl-1;i>=0;i--){
t+= k*(a[i]-'0');
k*=10;
j++;
if(j==4||i==0){
k = 1;
digit[size++] = t;
t = j = 0;
}
}
}
void output(){
for(int i=size-1;i>=0;i--){
if(i!=size-1) printf("%04d",digit[i]);
else printf("%d",digit[i]);
}
printf("\n");
}
bigint operator + (const bigint &a) const {
int l=size>a.size?size:a.size,carry=0;
bigint ret;
ret.init();
for(int i=0;i<l;i++){
int t = digit[i]+a.digit[i]+carry;
carry = t/10000;
ret.digit[ret.size++]=t%10000;
}
if(carry!=0) ret.digit[ret.size++] = carry;
return ret;
}
}a,b,c;
int main(){
char str1[max],ch;
int l=0;
bool flag=false;
do{
ch=getchar();
}while(ch=='0');
do{
str1[l++]=ch;
ch=getchar();
}while(ch!='\n');
str1[l++] = 0;
a.set(str1);
l=0;
do{
ch=getchar();
}while(ch=='0');
do{
str1[l++]=ch;
ch=getchar();
}while(ch!='\n');
str1[l++] = 0;
b.set(str1);
// a.set(str1);
// b.set(str1);
// a.output();
// b.output();
c = a+b;
c.output();
printf("OK\n");//执行完这句不return 0
return 0;
}
代码如上图:
功能是把两个长整数相加。
然而神奇的事情发生了,如图!printf("OK\n")执行了,return值却不对!