/* author: Leonardone @ NEETSDKASU */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define BIGNUM_SIZE (60)
#define BIGNUM_FORMAT "%+055.25lf"
typedef char BigNum[BIGNUM_SIZE];
void initBigNumInt(BigNum num, int value);
void initBigNumDbl(BigNum num, double value);
void addBigNum(BigNum res, const BigNum num1, const BigNum num2);
void subBigNum(BigNum res, const BigNum num1, const BigNum num2);
int beginOfBigNum(const BigNum num);
void printBigNum(const BigNum num);
void mulBigNumInt(BigNum res, const BigNum num, int m);
int main(void) {
BigNum n1, n2, n3, n4, n5, n6;
initBigNumInt(n1, 12345);
initBigNumDbl
(n2
, 4.0 * atan(1.0)); initBigNumInt(n3, 0);
initBigNumInt(n4, 0);
initBigNumInt(n5, 0);
initBigNumInt(n6, 0);
addBigNum(n3, n1, n2);
subBigNum(n4, n1, n2);
addBigNum(n5, n4, n2);
mulBigNumInt(n6, n2, 300);
return 0;
}
int beginOfBigNum(const BigNum num) {
int i;
for (i = 1; i < len; i++) {
switch (num[i]) {
case '.':
return i - 1;
case '0':
break;
default:
return i;
}
}
return 0;
}
void printBigNum(const BigNum num) {
int ps = beginOfBigNum(num);
if (num[0] == '-') {
}
}
void initBigNumInt(BigNum num, int value) {
if (num != NULL) {
sprintf(num
, BIGNUM_FORMAT
, (double)value
); }
}
void initBigNumDbl(BigNum num, double value) {
if (num != NULL) {
sprintf(num
, BIGNUM_FORMAT
, value
); }
}
void addBigNum(BigNum res, const BigNum num1, const BigNum num2) {
int len, d1, d2, d3, f;
if (res == NULL || num1 == NULL || num2 == NULL) {
return;
}
f = 0;
while (len > 0) {
d1 = (int)num1[len] - '0';
d2 = (int)num2[len] - '0';
d3 = d1 + d2 + f;
f = d3 / 10;
res[len] = (char)((d3 % 10) + '0');
len--;
if (num1[len] == '.') {
len--;
}
}
}
void subBigNum(BigNum res, const BigNum num1, const BigNum num2) {
int len, d1, d2, d3, f;
if (res == NULL || num1 == NULL || num2 == NULL) {
return;
}
f = 0;
while (len > 0) {
d1 = (int)num1[len] - '0';
d2 = (int)num2[len] - '0';
d3 = d1 - d2 - f;
if (d3 < 0) {
d3 += 10;
f = 1;
} else {
f = 0;
}
res[len] = (char)(d3 + '0');
len--;
if (num1[len] == '.') {
len--;
}
}
}
void mulBigNumInt(BigNum res, const BigNum num, int m) {
int len, f, d1, d2;
if (res == NULL || num == NULL || m < 0) {
return;
}
f = 0;
while (len > 0) {
d1 = (int)num[len] - '0';
d2 = d1 * m + f;
f = d2 / 10;
d2 = d2 % 10;
res[len] = (char)(d2 + '0');
len--;
if (num[len] == '.') {
len--;
}
}
}
LyogYXV0aG9yOiBMZW9uYXJkb25lIEAgTkVFVFNES0FTVSAqLwojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8c3RyaW5nLmg+CiNpbmNsdWRlIDxtYXRoLmg+CgojZGVmaW5lIEJJR05VTV9TSVpFICg2MCkKI2RlZmluZSBCSUdOVU1fRk9STUFUICIlKzA1NS4yNWxmIgoKdHlwZWRlZiBjaGFyIEJpZ051bVtCSUdOVU1fU0laRV07Cgp2b2lkIGluaXRCaWdOdW1JbnQoQmlnTnVtIG51bSwgaW50IHZhbHVlKTsKdm9pZCBpbml0QmlnTnVtRGJsKEJpZ051bSBudW0sIGRvdWJsZSB2YWx1ZSk7CnZvaWQgYWRkQmlnTnVtKEJpZ051bSByZXMsIGNvbnN0IEJpZ051bSBudW0xLCBjb25zdCBCaWdOdW0gbnVtMik7CnZvaWQgc3ViQmlnTnVtKEJpZ051bSByZXMsIGNvbnN0IEJpZ051bSBudW0xLCBjb25zdCBCaWdOdW0gbnVtMik7CmludCBiZWdpbk9mQmlnTnVtKGNvbnN0IEJpZ051bSBudW0pOwp2b2lkIHByaW50QmlnTnVtKGNvbnN0IEJpZ051bSBudW0pOwp2b2lkIG11bEJpZ051bUludChCaWdOdW0gcmVzLCBjb25zdCBCaWdOdW0gbnVtLCBpbnQgbSk7CgppbnQgbWFpbih2b2lkKSB7CglCaWdOdW0gbjEsIG4yLCBuMywgbjQsIG41LCBuNjsKCQoJaW5pdEJpZ051bUludChuMSwgMTIzNDUpOwoJaW5pdEJpZ051bURibChuMiwgNC4wICogYXRhbigxLjApKTsKCWluaXRCaWdOdW1JbnQobjMsIDApOwoJaW5pdEJpZ051bUludChuNCwgMCk7Cglpbml0QmlnTnVtSW50KG41LCAwKTsKCWluaXRCaWdOdW1JbnQobjYsIDApOwoJCglwcmludGYoQklHTlVNX0ZPUk1BVCAiXG4iLCBhdG9mKG4xKSk7CglwcmludGYoQklHTlVNX0ZPUk1BVCAiXG4iLCBhdG9mKG4yKSk7CglwcmludGYoQklHTlVNX0ZPUk1BVCAiXG4iLCBhdG9mKG4zKSk7CgkKCWFkZEJpZ051bShuMywgbjEsIG4yKTsKCXN1YkJpZ051bShuNCwgbjEsIG4yKTsKCWFkZEJpZ051bShuNSwgbjQsIG4yKTsKCW11bEJpZ051bUludChuNiwgbjIsIDMwMCk7CgoJcHJpbnRmKEJJR05VTV9GT1JNQVQgIlxuIiwgYXRvZihuMykpOwoJcHJpbnRmKEJJR05VTV9GT1JNQVQgIlxuIiwgYXRvZihuNCkpOwoJcHJpbnRmKEJJR05VTV9GT1JNQVQgIlxuIiwgYXRvZihuNSkpOwoJcHJpbnRmKEJJR05VTV9GT1JNQVQgIlxuIiwgYXRvZihuNikpOwoJCglwdXRzKCItLS0tLS0tLS0iKTsKCQoJcHV0cyhuMSk7CglwdXRzKG4yKTsKCXB1dHMobjMpOwoJcHV0cyhuNCk7CglwdXRzKG41KTsKCXB1dHMobjYpOwoJCglwdXRzKCItLS0tLS0tLS0iKTsKCQoJcHJpbnRCaWdOdW0objEpOyBwdXRjaGFyKCdcbicpOwoJcHJpbnRCaWdOdW0objIpOyBwdXRjaGFyKCdcbicpOwoJcHJpbnRCaWdOdW0objMpOyBwdXRjaGFyKCdcbicpOwoJcHJpbnRCaWdOdW0objQpOyBwdXRjaGFyKCdcbicpOwoJcHJpbnRCaWdOdW0objUpOyBwdXRjaGFyKCdcbicpOwoJcHJpbnRCaWdOdW0objYpOyBwdXRjaGFyKCdcbicpOwoJCglyZXR1cm4gMDsKfQoKaW50IGJlZ2luT2ZCaWdOdW0oY29uc3QgQmlnTnVtIG51bSkgewoJaW50IGk7CglpbnQgbGVuID0gc3RybGVuKG51bSk7Cglmb3IgKGkgPSAxOyBpIDwgbGVuOyBpKyspIHsKCQlzd2l0Y2ggKG51bVtpXSkgewoJCWNhc2UgJy4nOgoJCQlyZXR1cm4gaSAtIDE7CgkJY2FzZSAnMCc6CgkJCWJyZWFrOwoJCWRlZmF1bHQ6CgkJCXJldHVybiBpOwoJCX0gCgl9CglyZXR1cm4gMDsKfQoKdm9pZCBwcmludEJpZ051bShjb25zdCBCaWdOdW0gbnVtKSB7CglpbnQgcHMgPSBiZWdpbk9mQmlnTnVtKG51bSk7CglpZiAobnVtWzBdID09ICctJykgewoJCXB1dGNoYXIoJy0nKTsKCX0KCXByaW50ZigiJXMiLCBudW0gKyBwcyk7Cn0KCnZvaWQgaW5pdEJpZ051bUludChCaWdOdW0gbnVtLCBpbnQgdmFsdWUpIHsKCWlmIChudW0gIT0gTlVMTCkgewoJCXNwcmludGYobnVtLCBCSUdOVU1fRk9STUFULCAoZG91YmxlKXZhbHVlKTsKCX0KfQoKdm9pZCBpbml0QmlnTnVtRGJsKEJpZ051bSBudW0sIGRvdWJsZSB2YWx1ZSkgewoJaWYgKG51bSAhPSBOVUxMKSB7CgkJc3ByaW50ZihudW0sIEJJR05VTV9GT1JNQVQsIHZhbHVlKTsKCX0KfQoKdm9pZCBhZGRCaWdOdW0oQmlnTnVtIHJlcywgY29uc3QgQmlnTnVtIG51bTEsIGNvbnN0IEJpZ051bSBudW0yKSB7CglpbnQgbGVuLCBkMSwgZDIsIGQzLCBmOwoJaWYgKHJlcyA9PSBOVUxMIHx8IG51bTEgPT0gTlVMTCB8fCBudW0yID09IE5VTEwpIHsKCQlyZXR1cm47Cgl9CglsZW4gPSBzdHJsZW4obnVtMSkgLSAxOwoJZiA9IDA7Cgl3aGlsZSAobGVuID4gMCkgewoJCWQxID0gKGludCludW0xW2xlbl0gLSAnMCc7CgkJZDIgPSAoaW50KW51bTJbbGVuXSAtICcwJzsKCQlkMyA9IGQxICsgZDIgKyBmOwoJCWYgPSBkMyAvIDEwOwoJCXJlc1tsZW5dID0gKGNoYXIpKChkMyAlIDEwKSArICcwJyk7CgkJbGVuLS07CgkJaWYgKG51bTFbbGVuXSA9PSAnLicpIHsKCQkJbGVuLS07CgkJfQoJfQp9CnZvaWQgc3ViQmlnTnVtKEJpZ051bSByZXMsIGNvbnN0IEJpZ051bSBudW0xLCBjb25zdCBCaWdOdW0gbnVtMikgewoJaW50IGxlbiwgZDEsIGQyLCBkMywgZjsKCWlmIChyZXMgPT0gTlVMTCB8fCBudW0xID09IE5VTEwgfHwgbnVtMiA9PSBOVUxMKSB7CgkJcmV0dXJuOwoJfQoJbGVuID0gc3RybGVuKG51bTEpIC0gMTsKCWYgPSAwOwoJd2hpbGUgKGxlbiA+IDApIHsKCQlkMSA9IChpbnQpbnVtMVtsZW5dIC0gJzAnOwoJCWQyID0gKGludCludW0yW2xlbl0gLSAnMCc7CgkJZDMgPSBkMSAtIGQyIC0gZjsKCQlpZiAoZDMgPCAwKSB7CgkJCWQzICs9IDEwOwoJCQlmID0gMTsKCQl9IGVsc2UgewoJCQlmID0gMDsKCQl9CgkJcmVzW2xlbl0gPSAoY2hhcikoZDMgKyAnMCcpOwoJCWxlbi0tOwoJCWlmIChudW0xW2xlbl0gPT0gJy4nKSB7CgkJCWxlbi0tOwoJCX0KCX0KfQoKdm9pZCBtdWxCaWdOdW1JbnQoQmlnTnVtIHJlcywgY29uc3QgQmlnTnVtIG51bSwgaW50IG0pIHsKCWludCBsZW4sIGYsIGQxLCBkMjsKCWlmIChyZXMgPT0gTlVMTCB8fCBudW0gPT0gTlVMTCB8fCBtIDwgMCkgewoJCXJldHVybjsKCX0KCWxlbiA9IHN0cmxlbihudW0pIC0gMTsKCWYgPSAwOwoJd2hpbGUgKGxlbiA+IDApIHsKCQlkMSA9IChpbnQpbnVtW2xlbl0gLSAnMCc7CgkJZDIgPSBkMSAqIG0gKyBmOwoJCWYgPSBkMiAvIDEwOwoJCWQyID0gZDIgJSAxMDsKCQlyZXNbbGVuXSA9IChjaGFyKShkMiArICcwJyk7CgkJbGVuLS07CgkJaWYgKG51bVtsZW5dID09ICcuJykgewoJCQlsZW4tLTsKCQl9Cgl9Cn0K