数据结构作业2版
#include<stdio.h>
#include<stdlib.h>
#include <string.h>
typedef struct acc{
int *da;
int len;
}acc;
int chrToInt(char *a,int q,int h){
int res=0;
int t=1;
for (int i=h;i>=q;i--){
if (a[i]=='\0'){
break;
}
res+=(a[i]-'0')*t;
t*=10;
}
return res;
}
acc* initAcc(char str[],int ln){
int *dat;
acc* a=(acc *)malloc(sizeof(acc));
int t,txa;
txa=0;
if (ln==0) {
t=0;
for (int i=0;;i++){
if(str[i]!='\0' && str[i]!='.'){
t++;
}else if(str[i]=='.'){
txa=i;
}else if(str[i]=='\0'){
break;
}
}
}else{
t=ln;
}
a->len=t/4+2;
printf("%d %d %d\n",t,txa,a->len);
a->da=(int *)malloc(sizeof(int)*(a->len));
dat=a->da;
if(ln==0){
if (txa!=0){
*dat=chrToInt(str,txa+1,t);
for(int i=0;i<4-t+txa;i++){
*dat*=10;
}
t=txa;
}
else *dat=0;
dat++;
for(int i=t-1;i>=0;i-=4){
*dat=chrToInt(str,i-3>0?i-3:0,i);
dat++;
}
}else{
for(int i=0;i<a->len;i++){
*dat=0;
dat++;
}
}
return a;
}
void showAcc(acc *a){
int *a1=a->da+(a->len-1);
for(int i=0;i<a->len-1;i++){
if(*a1>0) printf("%d ",*a1);
a1--;
}
if(*a1>0)printf(". %d",*a1);
printf("\n");
}
acc* addAcc(acc *a,acc *b){
int l=a->len>b->len ? a->len:b->len;
int *a1,*b1,*c1;
int a2,b2;
int tc;
acc *c=initAcc("",l*4);
a1=a->da;a2=*a1;
b1=b->da;b2=*b1;
c1=c->da;
tc=0;
for(int i=0;i<l;i++){
tc=a2+b2+tc;
*c1=tc%10000;
tc/=10000;
c1++;
if(i>=a->len-1){
a2=0;
}else{
a1++;
a2=*a1;
}
if(i>=b->len-1){
b2=0;
}else{
b1++;
b2=*b1;
}
}
return c;
}
acc* jianAcc(acc *a,acc *b){
int l=a->len>b->len ? a->len:b->len;
int *a1,*b1,*c1,*a2,*b2;
int tc;
acc *c=initAcc("",l*4);
a2=(int *)malloc(sizeof(int)*(a->len));
b2=(int *)malloc(sizeof(int)*(b->len));
memcpy(a2,a->da,sizeof(int)*(a->len));
memcpy(b2,b->da,sizeof(int)*(b->len));
a1=a2;
b1=b2;
c1=c->da;
tc=0;
for(int i=0;i<l;i++){
if (*a1>=*b1){
*c1=*a1-*b1;
}else{
*c1=*a1+10000-*b1;
*(a1+1)-=1;
}
c1++;
if(i>=a->len-1){
*a1=0;
}else{
a1++;
}
if(i>=b->len-1){
*b1=0;
}else{
b1++;
}
}
free(a2);
free(b2);
return c;
}
int main(){
acc *a,*b,*c,*d;
a=initAcc("012345698.95",0);
b=initAcc("345698.95",0);
c=addAcc(a,b);
d=jianAcc(c,a);
printf("a ");
showAcc(a);
printf("b ");
showAcc(b);
printf("c ");
showAcc(c);
printf("d ");
showAcc(d);
}