elong
parent
959f195b5f
commit
3472194b08
@ -0,0 +1,57 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#define N 100
|
||||
|
||||
struct _Decimal {
|
||||
char a[N]; // number is a[0]*10^0 + a[1]*10^1 + ..+ a[n]*10^n
|
||||
unsigned int n;
|
||||
};
|
||||
typedef struct _Decimal Decimal;
|
||||
|
||||
Decimal zero = {{0}, 0};
|
||||
|
||||
Decimal add(Decimal a, Decimal b) {
|
||||
Decimal c;
|
||||
char cf = 0;
|
||||
unsigned int i;
|
||||
|
||||
if (a.n < b.n) {
|
||||
c = a;
|
||||
a = b;
|
||||
b = c;
|
||||
}
|
||||
c.n = a.n;
|
||||
|
||||
for (i = 0; i <= b.n; ++i) {
|
||||
c.a[i] = (a.a[i] + b.a[i] + cf) % 10;
|
||||
cf = (int)((a.a[i] + b.a[i] + cf) / 10);
|
||||
}
|
||||
|
||||
for (; i <= a.n; ++i) {
|
||||
c.a[i] = (a.a[i] + cf) % 10;
|
||||
cf = (int)((a.a[i] + cf) / 10);
|
||||
}
|
||||
if (cf) {
|
||||
++c.n;
|
||||
c.a[i] = cf;
|
||||
}
|
||||
return c;
|
||||
|
||||
}
|
||||
|
||||
void print(Decimal x) {
|
||||
for (int i = x.n; i >= 0; --i)
|
||||
printf("%d", x.a[i]);
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
int main(){
|
||||
Decimal b = {{9, 9, 9}, 2};
|
||||
Decimal a = {{2}, 0};
|
||||
|
||||
Decimal res;
|
||||
|
||||
res = add(a, b);
|
||||
print(res);
|
||||
return 0;
|
||||
}
|
Reference in New Issue