본문내용
= 0;
++i;
}
arrayhap_one[i] = EndOfDisit;
int resultfour[100];
//초기화
for(i = 0; i < (2 * digit); ++i)
resultfour[i] = 0;
resultfour[i] = EndOfDisit;
Prod(y, z, resultfour);
ArrayHap(resultone, arrayhap_one, cc);
ArrayHap(cc, resultfour, cc);
}
int LLength(int a[])
{
for(int i = 0; a[i] != EndOfDisit; ++i);
return i;
}
int Maxchoice(int c, int d)
{
if(c < d)
return d;
return c;
}
bool Odd(int f)
{
int n;
n = f % 2;
if(n == 0)
return FALSE;
return TRUE;
}
void IntMul(int a[], int b[], int c[])
{
int xa = 0;
int yb = 0;
int ab = 0;
int xx, yy, mok0, mok1, mok2, mok3;
if( a[0] == EndOfDisit || b[0] == EndOfDisit)
{
c[0] = EndOfDisit;
return;
}
// 배열을 정수변수로....
xx = LLength(a);
if(xx == 1)
xa = a[0];
else
{
xa = a[1];
for(int i = 0; i < a[0]; i++)
xa = xa + 10;
}
yy = LLength(b);
if(yy == 1)
yb = b[0];
else
{
yb = b[1];
for(int i = 0; i < b[0]; i++)
yb = yb + 10;
}
ab = xa * yb;
// 숫자 0을 곱할 경우....처리..
if(ab != 0)
{
// 정수 변수를 배열로.....
mok0 = ab/1000;
mok1 = ab/100;
mok1 = mok1 % 10;
mok2 = ab/10;
mok2 = mok2 % 100;
mok2 = mok2 % 10;
mok3 = ab;
mok3 = mok3 % 1000;
mok3 = mok3 % 100;
mok3 = mok3 % 10;
if(mok0 != 0)
{
c[0] = mok0;
c[1] = mok1;
c[2] = mok2;
c[3] = mok3;
c[4] = EndOfDisit;
}
else
if(mok1 != 0)
{
c[0] = mok1;
c[1] = mok2;
c[2] = mok3;
c[3] = EndOfDisit;
}
else
if(mok2 != 0)
{
c[0] = mok2;
c[1] = mok3;
c[2] = EndOfDisit;
}
else
if(mok3 != 0)
{
c[0] = mok3;
c[1] = EndOfDisit;
}
}
else
c[0] = EndOfDisit;
}
void ArrayHap(int a[], int b[], int c[])
{
int alen, blen, differ;
int carry = 0;
int abhap, abrem;
int i;
alen = LLength(a);
blen = LLength(b);
if(alen == 0)
if(blen == 0)
{
c[0] = EndOfDisit;
return;
}
else
{
for(i = 0; i < blen; ++i)
c[i] = b[i];
c[i] = EndOfDisit;
return;
}
else
if(blen == 0)
{
for(i=0; i < alen; ++i)
c[i] = a[i];
c[i] = EndOfDisit;
return;
}
if(alen >= blen)
{
differ = alen - blen;
for(i = (alen - 1); i >= differ; --i)
{
abhap = a[i] + b[i-differ] + carry;
carry = abhap / 10;
abrem = abhap % 10;
c[i+1] = abrem;
}
if(carry == 0)
{
if(differ != 0)
{
for(i = (differ-1); i >= 0; --i)
c[i+1] = a[i];
for(i = 0; i < alen; ++i)
c[i] = c[i+1];
c[i] = EndOfDisit;
}
else
{
for(i = 0; i < alen; ++i)
c[i] = c[i+1];
c[alen] = EndOfDisit;
}
}
else
{
for(i = (differ - 1); i >= 0; --i)
{
abhap = a[i] + carry;
carry = abhap / 10;
abrem = abhap % 10;
c[i+1] = abrem;
}
if(carry == 1)
{
c[0] = carry;
c[alen + 1] = EndOfDisit;
}
else
{
for(i = 0; i < alen; ++i)
c[i] = c[i+1];
c[i] = EndOfDisit;
}
}
}
else
{
differ = blen - alen;
for(i = (blen -1); i >= differ; --i)
{
abhap = b[i] + a[i-differ] + carry;
carry = abhap / 10;
abrem = abhap % 10;
c[i+1] = abrem;
}
if(carry == 0)
{
for(i = (differ-1); i >= 0; --i)
c[i+1] = b[i];
for(i = 0; i < blen; ++i)
c[i] = c[i+1];
c[i] = EndOfDisit;
}
else
{
for(i = (differ-1); i >= 0; --i)
{
abhap = b[i] + carry;
carry = abhap / 10;
abrem = abhap % 10;
c[i+1] = abrem;
}
if(carry == 1)
{
c[0] = carry;
c[blen + 1] = EndOfDisit;
}
else
{
for(i = 0; i < blen; ++i)
c[i] = c[i+1];
c[i] = EndOfDisit;
}
}
}
}
++i;
}
arrayhap_one[i] = EndOfDisit;
int resultfour[100];
//초기화
for(i = 0; i < (2 * digit); ++i)
resultfour[i] = 0;
resultfour[i] = EndOfDisit;
Prod(y, z, resultfour);
ArrayHap(resultone, arrayhap_one, cc);
ArrayHap(cc, resultfour, cc);
}
int LLength(int a[])
{
for(int i = 0; a[i] != EndOfDisit; ++i);
return i;
}
int Maxchoice(int c, int d)
{
if(c < d)
return d;
return c;
}
bool Odd(int f)
{
int n;
n = f % 2;
if(n == 0)
return FALSE;
return TRUE;
}
void IntMul(int a[], int b[], int c[])
{
int xa = 0;
int yb = 0;
int ab = 0;
int xx, yy, mok0, mok1, mok2, mok3;
if( a[0] == EndOfDisit || b[0] == EndOfDisit)
{
c[0] = EndOfDisit;
return;
}
// 배열을 정수변수로....
xx = LLength(a);
if(xx == 1)
xa = a[0];
else
{
xa = a[1];
for(int i = 0; i < a[0]; i++)
xa = xa + 10;
}
yy = LLength(b);
if(yy == 1)
yb = b[0];
else
{
yb = b[1];
for(int i = 0; i < b[0]; i++)
yb = yb + 10;
}
ab = xa * yb;
// 숫자 0을 곱할 경우....처리..
if(ab != 0)
{
// 정수 변수를 배열로.....
mok0 = ab/1000;
mok1 = ab/100;
mok1 = mok1 % 10;
mok2 = ab/10;
mok2 = mok2 % 100;
mok2 = mok2 % 10;
mok3 = ab;
mok3 = mok3 % 1000;
mok3 = mok3 % 100;
mok3 = mok3 % 10;
if(mok0 != 0)
{
c[0] = mok0;
c[1] = mok1;
c[2] = mok2;
c[3] = mok3;
c[4] = EndOfDisit;
}
else
if(mok1 != 0)
{
c[0] = mok1;
c[1] = mok2;
c[2] = mok3;
c[3] = EndOfDisit;
}
else
if(mok2 != 0)
{
c[0] = mok2;
c[1] = mok3;
c[2] = EndOfDisit;
}
else
if(mok3 != 0)
{
c[0] = mok3;
c[1] = EndOfDisit;
}
}
else
c[0] = EndOfDisit;
}
void ArrayHap(int a[], int b[], int c[])
{
int alen, blen, differ;
int carry = 0;
int abhap, abrem;
int i;
alen = LLength(a);
blen = LLength(b);
if(alen == 0)
if(blen == 0)
{
c[0] = EndOfDisit;
return;
}
else
{
for(i = 0; i < blen; ++i)
c[i] = b[i];
c[i] = EndOfDisit;
return;
}
else
if(blen == 0)
{
for(i=0; i < alen; ++i)
c[i] = a[i];
c[i] = EndOfDisit;
return;
}
if(alen >= blen)
{
differ = alen - blen;
for(i = (alen - 1); i >= differ; --i)
{
abhap = a[i] + b[i-differ] + carry;
carry = abhap / 10;
abrem = abhap % 10;
c[i+1] = abrem;
}
if(carry == 0)
{
if(differ != 0)
{
for(i = (differ-1); i >= 0; --i)
c[i+1] = a[i];
for(i = 0; i < alen; ++i)
c[i] = c[i+1];
c[i] = EndOfDisit;
}
else
{
for(i = 0; i < alen; ++i)
c[i] = c[i+1];
c[alen] = EndOfDisit;
}
}
else
{
for(i = (differ - 1); i >= 0; --i)
{
abhap = a[i] + carry;
carry = abhap / 10;
abrem = abhap % 10;
c[i+1] = abrem;
}
if(carry == 1)
{
c[0] = carry;
c[alen + 1] = EndOfDisit;
}
else
{
for(i = 0; i < alen; ++i)
c[i] = c[i+1];
c[i] = EndOfDisit;
}
}
}
else
{
differ = blen - alen;
for(i = (blen -1); i >= differ; --i)
{
abhap = b[i] + a[i-differ] + carry;
carry = abhap / 10;
abrem = abhap % 10;
c[i+1] = abrem;
}
if(carry == 0)
{
for(i = (differ-1); i >= 0; --i)
c[i+1] = b[i];
for(i = 0; i < blen; ++i)
c[i] = c[i+1];
c[i] = EndOfDisit;
}
else
{
for(i = (differ-1); i >= 0; --i)
{
abhap = b[i] + carry;
carry = abhap / 10;
abrem = abhap % 10;
c[i+1] = abrem;
}
if(carry == 1)
{
c[0] = carry;
c[blen + 1] = EndOfDisit;
}
else
{
for(i = 0; i < blen; ++i)
c[i] = c[i+1];
c[i] = EndOfDisit;
}
}
}
}
추천자료
컴퓨터 알고리즘 - 큰 정수곱셈 소스코드 및 분석
[C언어실습]세 정수를 입력 받아서 가장 큰 수를 찾아 출력
큰정수 합 구하기 및 실행시간 측정 구현하기(C언어)
큰 수 계산기 - 큰 수 곱셈
분할정복법을 이용한 큰정수의 곱셈
중학교 1학년 수학 학습 지도안 ( 정수의 곱셈과 나눗셈, 유리수의 개념과 대소관계)
중1 학습 지도안 정수와 유리수 ( 유리수의 곱셈과 나눗셈, 유리수의 덧셈과 나눗셈)
중1 학습 지도안 정수와 유리수 ( 정수의 곱셈과 나눗셈, 유리수의 개념과 대소관계)
중1 학습 지도안 정수와 유리수 ( 유리수의 곱셈과 나눗셈, 유리수의 덧셈과 뺄셈)