반응형
#원주율 #3.14159 #1000자리 #파이
#원주율를 구하는 C언어 코드
#include <stdio.h>
void ladd(short*, short*, short*);
void lsub(short*, short*, short*);
void ldiv(short*, short, short*);
void printresult(short*);
#define L 1000 /* 자리수 */
#define L1 ((L/4)+1)
#define L2 (L1+1)
#define N (short)(L/1.39794+1)
int main(void)
{
static short s[L2 + 2], w[L2 + 2], v[L2 + 2], q[L2 + 2];
short k;
for (k = 0; k <= L2; k++)
s[k] = w[k] = v[k] = q[k] = 0;
w[0] = 16 * 5; v[0] = 4 * 239; /* 마친의 공식 */
for (k = 1; k <= N; k++) {
ldiv(w, 25, w);
ldiv(v, 239, v); ldiv(v, 239, v);
lsub(w, v, q); ldiv(q, 2 * k - 1, q);
if ((k % 2) != 0)
ladd(s, q, s);
else
lsub(s, q, s);
}
printresult(s);
return 0;
}
void printresult(short c[])
{
short i;
printf("%3d. ", c[0]);
for (i = 1; i < L1; i++)
printf("%04d ", c[i]);
printf("\n");
}
void ladd(short a[], short b[], short c[])
{
short i, cy = 0;
for (i = L2; i >= 0; i--) {
c[i] = a[i] + b[i] + cy;
if (c[i] < 10000)
cy = 0;
else {
c[i] = c[i] - 10000;
cy = 1;
}
}
}
void lsub(short a[], short b[], short c[])
{
short i, brrw = 0;
for (i = L2; i >= 0; i--) {
c[i] = a[i] - b[i] - brrw;
if (c[i] >= 0)
brrw = 0;
else {
c[i] = c[i] + 10000;
brrw = 1;
}
}
}
void ldiv(short a[], short b, short c[])
{
short i; long d, rem = 0;
for (i = 0; i <= L2; i++) {
d = a[i];
c[i] = (d + rem) / b;
rem = ((d + rem) % b) * 10000;
}
}
3. 1415 9265 3589 7932 3846 2643 3832 7950 2884 1971 6939 9375 1058 2097 4944 5923 0781 6406 2862 0899 8628 0348 2534 2117 0679 8214 8086 5132 8230 6647 0938 4460 9550 5822 3172 5359 4081 2848 1117 4502 8410 2701 9385 2110 5559 6446 2294 8954 9303 8196 4428 8109 7566 5933 4461 2847 5648 2337 8678 3165 2712 0190 9145 6485 6692 3460 3486 1045 4326 6482 1339 3607 2602 4914 1273 7245 8700 6606 3155 8817 4881 5209 2096 2829 2540 9171 5364 3678 9259 0360 0113 3053 0548 8204 6652 1384 1469 5194 1511 6094 3305 7270 3657 5959 1953 0921 8611 7381 9326 1179 3105 1185 4807 4462 3799 6274 9567 3518 8575 2724 8912 2793 8183 0119 4912 9833 6733 6244 0656 6430 8602 1394 9463 9522 4737 1907 0217 9860 9437 0277 0539 2171 7629 3176 7523 8467 4818 4676 6940 5132 0005 6812 7145 2635 6082 7785 7713 4275 7789 6091 7363 7178 7214 6844 0901 2249 5343 0146 5495 8537 1050 7922 7968 9258 9235 4201 9956 1121 2902 1960 8640 3441 8159 8136 2977 4771 3099 6051 8707 2113 4999 9998 3729 7804 9951 0597 3173 2816 0963 1859 5024 4594 5534 6908 3026 4252 2308 2533 4468 5035 2619 3118 8171 0100 0313 7838 7528 8658 7533 2083 8142 0617 1776 6914 7303 5982 5349 0428 7554 6873 1159 5628 6388 2353 7875 9375 1957 7818 5778 0532 1712 2680 6613 0019 2787 6611 1959 0921 6420 1989 |
반응형
'C_C++' 카테고리의 다른 글
(C언어) strtok: 문자열 분리 (0) | 2022.11.19 |
---|---|
(C/C++) 알파벳 개수: 대소문자 구분 (0) | 2022.11.17 |
(C언어) 오늘의 명언 출력하기 (0) | 2022.11.15 |
(C언어) 석차(순위) 구하기 (0) | 2022.11.15 |
(C언어) 커서 위치 지정하기: gotoxy(x, y) (0) | 2022.11.14 |