#include
#include
#include
#define DLENG 20
void disp_data(char* str,int a[DLENG],int pm_flg);
void input_data(char* str,int a[DLENG]);
int sub_data(int a[DLENG],int b[DLENG],int c[DLENG]);
int main(void)
{
int i,j,pm_flg;
int A[DLENG],B[DLENG],C[DLENG];
memset(A,0,sizeof(int)*DLENG);
memset(B,0,sizeof(int)*DLENG);
input_data("a",A);
input_data("b",B);
pm_flg = sub_data(A,B,C);
disp_data("A-B = ",C,pm_flg);
return 0;
}
int sub_data(int a[DLENG],int b[DLENG],int c[DLENG])
{
int i,ii,iii,pm_flg=0;
int* aa=(int*)calloc(DLENG,sizeof(int));
int* bb=(int*)calloc(DLENG,sizeof(int));
int *ap,*bp;
memcpy(aa,a,sizeof(int)*DLENG);
memcpy(bb,b,sizeof(int)*DLENG);
for(i=DLENG-1; i>=0; i--){
if(aa[i]>bb[i]) { break; }
else if(aa[i]<bb[i]){ pm_flg=1; break; }
}
if(pm_flg){ap=bb; bp=aa;}
else {ap=aa; bp=bb;}
for(i=0;i<DLENG;i++){
if((ap[i])<bp[i]){
if(ap[i+1]){
c[i]=(ap[i]+10-bp[i]);
ap[i+1]--;
} else {
for(ii=i+2;ii<DLENG;ii++){
if(ap[ii]){
ap[ii]--;
for(iii=ii-1;iii>i;iii--) ap[iii] += 9;
break;
}
}
c[i]=(ap[i]+10-bp[i]);
}
} else {
c[i]=(ap[i]-bp[i]);
}
}
free(aa); free(bb);
return pm_flg;
}
void disp_data(char* str,int a[DLENG],int pm_flg)
{
int i;
printf("%s",str);
if(pm_flg) printf("-");
for(i=DLENG-1;i>=0;i--){
printf("%d", a[i]);
if(i==0){putchar('\n');}
}
}
void input_data(char* str,int a[DLENG])
{
int i,len;
char c[2],buf[BUFSIZ];
memset(buf,0,sizeof(char)*BUFSIZ);
printf("input data[%s]: ",str);
scanf("%s",buf);
len = strlen(buf);
for(i=0;i<DLENG;i++){
c[0] = buf[len-i-1];
a[i] = atoi(&c);
}
}
|