#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <malloc.h>
#include <string.h>
void summ(unsigned a[16], unsigned b[16], unsigned c[16]) //a = b + c
{
int i;
int flag = 0;
unsigned long long res;
for(i = 0; i < 16; i++)
{
res = b[i];
res += c[i] + flag;
a[i] = res;
flag = res >> 32;
}
}
void neg(unsigned x[16]) // -x
{
int i;
for(i = 0; i < 16; i++)
{
x[i] = ~x[i];
}
for(i = 0; i < 16; i++)
{
x[i]++;
if(x[i] != 0)
{
break;
}
}
}
void mult(unsigned a[16], unsigned b[16], unsigned c) // a = b * c
{
int i;
int flag = 0;
unsigned long long res;
for(i = 0; i < 16; i++)
{
res = b[i];
res = res*c + flag;
a[i] = res;
flag = res >> 32;
}
}
void divide(unsigned a[16], unsigned b[16], unsigned c) // a = b / c
{
int i;
unsigned long long flag = 0;
unsigned long long d;
unsigned long long res;
for(i = 15; i >= 0; i--)
{
res = b[i];
d = flag;
res += d << 32;
a[i] = res/c;
flag = res % c;
}
}
void longtodecimal(int a[10], int b[100], unsigned x[16]) // a[10]...a[1]a[0].b[1]b[2]...b[100]...
{
unsigned x1[16];
unsigned x2[16];
unsigned x3[16];
unsigned x4[16];
unsigned x5[16];
unsigned y[16];
unsigned y1[16];
unsigned y2[16];
unsigned y3[16];
unsigned y4[16];
unsigned y5[16];
int i;
int j;
memcpy(y
, x
, 16*sizeof(unsigned));
for (i = 1; i < 10; i++) //wrong
{
memcpy(x1
, x
, 16*sizeof(unsigned));
for(j = 0; j < 12; j++)
{
x1[j] = 0;
}
divide(x2, x1, 10);
memcpy(x
, x2
, 16*sizeof(unsigned));
for(j = 12; j < 16; j++)
{
x2[j] = 0;
}
mult(x3, x2, 10);
a[i] = x3[12];
}
for(i = 0; i < 100; i++)
{
memcpy(y1
, y
, 16*sizeof(unsigned));
for(j = 12; j < 16; j++)
{
y1[j] = 0;
}
mult(y2, y1, 10);
memcpy(y
, y2
, 16*sizeof(unsigned));
for(j = 0; j < 12; j++)
{
y2[j] = 0;
}
divide(y3, y2, 10);
for(j = 0; j < 12; j++)
{
y3[j] = 0;
}
mult(y4, y3, 10);
neg(y4);
summ(y5, y2, y4);
b[i] = y5[12];
}
}
int main(void)
{
unsigned x[16];
unsigned y[16];
unsigned z[16];
int a[10];
int b[100];
int i;
int p = 9;
for(i = 0; i < 16; i++)
{
x[i] = 0;
}
x[12] = 1;
mult(y, x, 4);
divide(z, y, 3);
longtodecimal(a, b, z);
while(a[p] == 0)
{
p--;
}
for(i = p; i >= 0; i--)
{
}
for(i = 0; i < 100; i++)
{
}
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPG1hdGguaD4KI2luY2x1ZGUgPG1hbGxvYy5oPgojaW5jbHVkZSA8c3RyaW5nLmg+Cgp2b2lkIHN1bW0odW5zaWduZWQgYVsxNl0sIHVuc2lnbmVkIGJbMTZdLCB1bnNpZ25lZCBjWzE2XSkgLy9hID0gYiArIGMKewogICAgaW50IGk7CiAgICBpbnQgZmxhZyA9IDA7CiAgICB1bnNpZ25lZCBsb25nIGxvbmcgcmVzOwoKICAgIGZvcihpID0gMDsgaSA8IDE2OyBpKyspCiAgICB7CiAgICAgICAgcmVzID0gYltpXTsKICAgICAgICByZXMgKz0gY1tpXSArIGZsYWc7CiAgICAgICAgYVtpXSA9IHJlczsKICAgICAgICBmbGFnID0gcmVzID4+IDMyOwogICAgfQp9Cgp2b2lkIG5lZyh1bnNpZ25lZCB4WzE2XSkgLy8gLXgKewogICAgaW50IGk7CgogICAgZm9yKGkgPSAwOyBpIDwgMTY7IGkrKykKICAgIHsKICAgICAgICB4W2ldID0gfnhbaV07CiAgICB9CgogICAgZm9yKGkgPSAwOyBpIDwgMTY7IGkrKykKICAgIHsKICAgICAgICB4W2ldKys7CgogICAgICAgIGlmKHhbaV0gIT0gMCkKICAgICAgICB7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KfQoKdm9pZCBtdWx0KHVuc2lnbmVkIGFbMTZdLCB1bnNpZ25lZCBiWzE2XSwgdW5zaWduZWQgYykgLy8gYSA9IGIgKiBjCnsKICAgIGludCBpOwogICAgaW50IGZsYWcgPSAwOwogICAgdW5zaWduZWQgbG9uZyBsb25nIHJlczsKCiAgICBmb3IoaSA9IDA7IGkgPCAxNjsgaSsrKQogICAgewogICAgICAgIHJlcyA9IGJbaV07CiAgICAgICAgcmVzID0gcmVzKmMgKyBmbGFnOwogICAgICAgIGFbaV0gPSByZXM7CiAgICAgICAgZmxhZyA9IHJlcyA+PiAzMjsKICAgIH0KfQoKdm9pZCBkaXZpZGUodW5zaWduZWQgYVsxNl0sIHVuc2lnbmVkIGJbMTZdLCB1bnNpZ25lZCBjKSAvLyBhID0gYiAvIGMKewogICAgaW50IGk7CiAgICB1bnNpZ25lZCBsb25nIGxvbmcgZmxhZyA9IDA7CiAgICB1bnNpZ25lZCBsb25nIGxvbmcgZDsKICAgIHVuc2lnbmVkIGxvbmcgbG9uZyByZXM7CgogICAgZm9yKGkgPSAxNTsgaSA+PSAwOyBpLS0pCiAgICB7CiAgICAgICAgcmVzID0gYltpXTsKICAgICAgICBkID0gZmxhZzsKICAgICAgICByZXMgKz0gZCA8PCAzMjsKICAgICAgICBhW2ldID0gcmVzL2M7CiAgICAgICAgZmxhZyA9IHJlcyAlIGM7CiAgICB9Cn0KCnZvaWQgbG9uZ3RvZGVjaW1hbChpbnQgYVsxMF0sIGludCBiWzEwMF0sIHVuc2lnbmVkIHhbMTZdKSAvLyBhWzEwXS4uLmFbMV1hWzBdLmJbMV1iWzJdLi4uYlsxMDBdLi4uCnsKICAgIHVuc2lnbmVkIHgxWzE2XTsKICAgIHVuc2lnbmVkIHgyWzE2XTsKICAgIHVuc2lnbmVkIHgzWzE2XTsKICAgIHVuc2lnbmVkIHg0WzE2XTsKICAgIHVuc2lnbmVkIHg1WzE2XTsKICAgIHVuc2lnbmVkIHlbMTZdOwogICAgdW5zaWduZWQgeTFbMTZdOwogICAgdW5zaWduZWQgeTJbMTZdOwogICAgdW5zaWduZWQgeTNbMTZdOwogICAgdW5zaWduZWQgeTRbMTZdOwogICAgdW5zaWduZWQgeTVbMTZdOwogICAgaW50IGk7CiAgICBpbnQgajsKCiAgICBtZW1jcHkoeSwgeCwgMTYqc2l6ZW9mKHVuc2lnbmVkKSk7CgogICAgZm9yIChpID0gMTsgaSA8IDEwOyBpKyspIC8vd3JvbmcKICAgIHsKICAgICAgICAgbWVtY3B5KHgxLCB4LCAxNipzaXplb2YodW5zaWduZWQpKTsKCiAgICAgICAgZm9yKGogPSAwOyBqIDwgMTI7IGorKykKICAgICAgICB7CiAgICAgICAgICAgIHgxW2pdID0gMDsKICAgICAgICB9CgogICAgICAgIGRpdmlkZSh4MiwgeDEsIDEwKTsKICAgICAgICBtZW1jcHkoeCwgeDIsIDE2KnNpemVvZih1bnNpZ25lZCkpOwoKICAgICAgICBmb3IoaiA9IDEyOyBqIDwgMTY7IGorKykKICAgICAgICB7CiAgICAgICAgICAgIHgyW2pdID0gMDsKICAgICAgICB9CgogICAgICAgIG11bHQoeDMsIHgyLCAxMCk7CiAgICAgICAgYVtpXSA9IHgzWzEyXTsKICAgIH0KCiAgICBmb3IoaSA9IDA7IGkgPCAxMDA7IGkrKykKICAgIHsKICAgICAgICBtZW1jcHkoeTEsIHksIDE2KnNpemVvZih1bnNpZ25lZCkpOwoKICAgICAgICBmb3IoaiA9IDEyOyBqIDwgMTY7IGorKykKICAgICAgICB7CiAgICAgICAgICAgIHkxW2pdID0gMDsKICAgICAgICB9CgogICAgICAgIG11bHQoeTIsIHkxLCAxMCk7CiAgICAgICAgbWVtY3B5KHksIHkyLCAxNipzaXplb2YodW5zaWduZWQpKTsKCiAgICAgICAgZm9yKGogPSAwOyBqIDwgMTI7IGorKykKICAgICAgICB7CiAgICAgICAgICAgIHkyW2pdID0gMDsKICAgICAgICB9CgogICAgICAgIGRpdmlkZSh5MywgeTIsIDEwKTsKCiAgICAgICAgZm9yKGogPSAwOyBqIDwgMTI7IGorKykKICAgICAgICB7CiAgICAgICAgICAgIHkzW2pdID0gMDsKICAgICAgICB9CgogICAgICAgIG11bHQoeTQsIHkzLCAxMCk7CiAgICAgICAgbmVnKHk0KTsKICAgICAgICBzdW1tKHk1LCB5MiwgeTQpOwogICAgICAgIGJbaV0gPSB5NVsxMl07CiAgICB9Cn0KCmludCBtYWluKHZvaWQpCnsKICAgIHVuc2lnbmVkIHhbMTZdOwogICAgdW5zaWduZWQgeVsxNl07CiAgICB1bnNpZ25lZCB6WzE2XTsKICAgIGludCBhWzEwXTsKICAgIGludCBiWzEwMF07CiAgICBpbnQgaTsKICAgIGludCBwID0gOTsKCiAgICBmb3IoaSA9IDA7IGkgPCAxNjsgaSsrKQogICAgewogICAgICAgIHhbaV0gPSAwOwogICAgfQoKICAgIHhbMTJdID0gMTsKCiAgICBtdWx0KHksIHgsIDQpOwoKICAgIGRpdmlkZSh6LCB5LCAzKTsKCiAgICBsb25ndG9kZWNpbWFsKGEsIGIsIHopOwoKCiAgICB3aGlsZShhW3BdID09IDApCiAgICB7CiAgICAgICAgcC0tOwogICAgfQoKICAgIGZvcihpID0gcDsgaSA+PSAwOyBpLS0pCiAgICB7CiAgICAgICAgcHJpbnRmKCIlZCIsIGFbaV0pOwogICAgfQoKICAgIHByaW50ZigiLiIpOwoKICAgIGZvcihpID0gMDsgaSA8IDEwMDsgaSsrKQogICAgewogICAgICAgIHByaW50ZigiJWQiLCBiW2ldKTsKICAgIH0KCiAgICByZXR1cm4gMDsKfQ==