http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=forum&wr_id=103700&page=1
이글에 보니 대수 곱하기에 대한 부분이 있길래
php의 bcmul 함수를 사용하지 않고 만들어보았습니다.
사용은 자유롭습니다. 강좌나 책의 내용으로 사용될 경우 허락을 받으셔야 합니다.
<?php
$a = '42512345897522114555478855632252456333255665877700001132';
$b = '42589745621354895231456877562223662232556666666645588441';
function Ybcmul($num1, $num2){
$array = Array();
$num1_len = strlen($num1);
$num2_len = strlen($num2);
for ($i = 1; $i <= $num1_len; $i++){
$num1_ = (int)substr($num1, $num1_len - $i, 1);
for ($j = 1; $j <= $num2_len; $j++){
$k = $i + $j - 1;
$num2_ = (int)substr($num2, $num2_len - $j, 1);
if (!empty($array[$k])) $array[$k] += $num1_ * $num2_;
else $array[$k] = $num1_ * $num2_;
}
}
$array_count = count($array);
for ($i = 1; $i < $array_count; $i++){
$array_ = (string)$array[$i];
$str_len = strlen($array_);
if ($str_len > 1) {
$l = $i + 1;
$array[$l] += (int)substr($array_, 0, $str_len - 1);
$array[$i] = (int)substr($array_, -1);
}
}
$return = '';
krsort ($array);
reset ($array);
foreach($array as $key => $val){
$return .= (string)$val;
}
return $return;
}
echo $a*$b . '<br>';
echo Ybcmul ($a, $b) . '<br>';
echo bcmul ($a, $b) . '<br>';
?><div class='small'>[이 게시물은 관리자님에 의해 2011-10-31 17:12:10 PHP & HTML에서 이동 됨]</div>
이글에 보니 대수 곱하기에 대한 부분이 있길래
php의 bcmul 함수를 사용하지 않고 만들어보았습니다.
사용은 자유롭습니다. 강좌나 책의 내용으로 사용될 경우 허락을 받으셔야 합니다.
<?php
$a = '42512345897522114555478855632252456333255665877700001132';
$b = '42589745621354895231456877562223662232556666666645588441';
function Ybcmul($num1, $num2){
$array = Array();
$num1_len = strlen($num1);
$num2_len = strlen($num2);
for ($i = 1; $i <= $num1_len; $i++){
$num1_ = (int)substr($num1, $num1_len - $i, 1);
for ($j = 1; $j <= $num2_len; $j++){
$k = $i + $j - 1;
$num2_ = (int)substr($num2, $num2_len - $j, 1);
if (!empty($array[$k])) $array[$k] += $num1_ * $num2_;
else $array[$k] = $num1_ * $num2_;
}
}
$array_count = count($array);
for ($i = 1; $i < $array_count; $i++){
$array_ = (string)$array[$i];
$str_len = strlen($array_);
if ($str_len > 1) {
$l = $i + 1;
$array[$l] += (int)substr($array_, 0, $str_len - 1);
$array[$i] = (int)substr($array_, -1);
}
}
$return = '';
krsort ($array);
reset ($array);
foreach($array as $key => $val){
$return .= (string)$val;
}
return $return;
}
echo $a*$b . '<br>';
echo Ybcmul ($a, $b) . '<br>';
echo bcmul ($a, $b) . '<br>';
?><div class='small'>[이 게시물은 관리자님에 의해 2011-10-31 17:12:10 PHP & HTML에서 이동 됨]</div>
댓글 10개
아시는 분도 많겠지만, 모르시는 분을 위해 함수를 간단하게 설명합니다.
이 함수의 기본 원리는 숫자를 문자열로 받아서, 그문자열 자리수 별로 곱한다음, 그 곱한수를 자신의 자리의 배열에 저장하고 그것을 정리한다음, 문자열을 이어서 반환합니다.
인자 두개는 숫자문자열로 받습니다.
$a = '42512345897522114555478855632252456333255665877700001132';
$b = '42589745621354895231456877562223662232556666666645588441';
연산과정중 사용될 배열을 미리 선언합니다. 안해도 관계는 없습니다.
$array = Array();
받은 두 숫자문자열의 길이를 측정합니다.
$num1_len = strlen($num1);
$num2_len = strlen($num2);
한개의 문자열씩 잘라와서 서로 모두 곱하고, 자신의 자리수에 해당하는 값을 키로 갖는 배열에 더합니다. 반복구문
for ($i = 1; $i <= $num1_len; $i++){
$num1_ = (int)substr($num1, $num1_len - $i, 1);
for ($j = 1; $j <= $num2_len; $j++){
$k = $i + $j - 1;
$num2_ = (int)substr($num2, $num2_len - $j, 1);
$array[$k] += $num1_ * $num2_;
}
}
연산결과가 저장된 배열의 크기를 측정합니다.
$array_count = count($array);
제일 작은 키값(1) 부터 차례대로 마지막 1바이트만 남겨놓고, 그 앞부분을 잘라서 바로위의 키값에 더합니다. 젤 큰 키의 값은 다음 과정을 따를 필요가 없습니다.
for ($i = 1; $i < $array_count; $i++){
$array[$i] = (string) $array[$i];
$str_len = strlen($array[$i]);
if ($str_len > 1) {
$l = $i + 1;
$array[$l] += (int)substr($array[$i], 0, $str_len - 1);
$array[$i] = (int)substr($array[$i], -1);
}
}
돌려줄 문자열을 선언합니다.
$return = '';
올바른 수행결과와 문자열 생성의 편의를 위해 배열을 키값에 대해 역순으로 정렬하고, 배열의 포인트를 초기화 합니다.
krsort ($array);
reset ($array);
배열의 순서대로 문자열을 기존의 문자열에 붙여나갑니다.
foreach($array as $key => $val){
$return .= (string)$val;
}
최종 문자열을 반환합니다.
return $return;
이 함수의 기본 원리는 숫자를 문자열로 받아서, 그문자열 자리수 별로 곱한다음, 그 곱한수를 자신의 자리의 배열에 저장하고 그것을 정리한다음, 문자열을 이어서 반환합니다.
인자 두개는 숫자문자열로 받습니다.
$a = '42512345897522114555478855632252456333255665877700001132';
$b = '42589745621354895231456877562223662232556666666645588441';
연산과정중 사용될 배열을 미리 선언합니다. 안해도 관계는 없습니다.
$array = Array();
받은 두 숫자문자열의 길이를 측정합니다.
$num1_len = strlen($num1);
$num2_len = strlen($num2);
한개의 문자열씩 잘라와서 서로 모두 곱하고, 자신의 자리수에 해당하는 값을 키로 갖는 배열에 더합니다. 반복구문
for ($i = 1; $i <= $num1_len; $i++){
$num1_ = (int)substr($num1, $num1_len - $i, 1);
for ($j = 1; $j <= $num2_len; $j++){
$k = $i + $j - 1;
$num2_ = (int)substr($num2, $num2_len - $j, 1);
$array[$k] += $num1_ * $num2_;
}
}
연산결과가 저장된 배열의 크기를 측정합니다.
$array_count = count($array);
제일 작은 키값(1) 부터 차례대로 마지막 1바이트만 남겨놓고, 그 앞부분을 잘라서 바로위의 키값에 더합니다. 젤 큰 키의 값은 다음 과정을 따를 필요가 없습니다.
for ($i = 1; $i < $array_count; $i++){
$array[$i] = (string) $array[$i];
$str_len = strlen($array[$i]);
if ($str_len > 1) {
$l = $i + 1;
$array[$l] += (int)substr($array[$i], 0, $str_len - 1);
$array[$i] = (int)substr($array[$i], -1);
}
}
돌려줄 문자열을 선언합니다.
$return = '';
올바른 수행결과와 문자열 생성의 편의를 위해 배열을 키값에 대해 역순으로 정렬하고, 배열의 포인트를 초기화 합니다.
krsort ($array);
reset ($array);
배열의 순서대로 문자열을 기존의 문자열에 붙여나갑니다.
foreach($array as $key => $val){
$return .= (string)$val;
}
최종 문자열을 반환합니다.
return $return;
게시글 목록
| 번호 | 제목 |
|---|---|
| 10853 |
JavaScript
속도를 위해 데이터를 접속자 메모리에
|
| 10852 | |
| 10850 | |
| 28848 | |
| 10849 |
JavaScript
백그라운드에음악걸기
|
| 28847 |
HTML
배경에 그림스타일지정
|
| 10846 |
기타
메신저형식의광고
2
|
| 28846 |
HTML
많이 쓰이는 자바스크립트
|
| 10845 | |
| 28845 |
HTML
마우스로 이미지크기 변경하기
|
| 10844 |
JavaScript
도메인 주소에 자동으로 www 붙이기 (php)
|
| 28844 |
HTML
다음부동산매물스크립트1
|
| 28843 |
HTML
다음부동산매물스크립트
|
| 10843 |
JavaScript
다각형이미지슬라이드쇼(익스네츠)
|
| 28842 |
HTML
날짜 형식 입력 받은 값 확인하기
|
| 10842 | |
| 28841 |
HTML
그림클릭시 레이어 띄우기
|
| 10841 |
MySQL
그림을 디비에 저장하는 방법
|
| 28840 |
HTML
그림 앨범 스크립트
|
| 28839 |
HTML
간단한 팝업오브젝트 예제
|
| 10840 |
JavaScript
가운데 정렬된 홈페이지에서 따라다니는 레이어
|
| 10839 | |
| 24791 | |
| 24789 | |
| 10836 |
기타
외부 링크 막기
2
|
| 28838 | |
| 24788 | |
| 24787 | |
| 24786 |
계약서
농지임대차계약서
|
| 28837 | |
| 28834 |
HTML
URL옆에 뜨는 숏컷아이콘만들기.
2
|
| 10835 |
JavaScript
클릭시 펼쳐지는 메뉴
|
| 10834 |
정규표현식
수수료계산
|
| 28833 |
HTML
기본적인 페이징
|
| 28829 |
HTML
만 19세 확인하기
3
|
| 10833 |
JavaScript
IE에서 쓰는 CSS filter 사이트 소개
|
| 10831 | |
| 10830 | |
| 10829 |
JavaScript
iconv 함수 사용시 일부 글자가 변환되지 않는경우
|
| 28828 |
HTML
금액에 점찍고 한글 표시하기
|
| 10828 | |
| 10827 |
MySQL
mysql link 추가로 만들기
|
| 10823 | |
| 10822 |
기타
[펌] SAMBA 설정
|
| 10821 |
JavaScript
1-1000 까지 누락된 숫자 구하기
|
| 10820 | |
| 28822 |
HTML
간단하게 만들어본 프레임워크
5
|
| 10814 | |
| 10812 |
Flash
vr기능-도와주셈
1
|
| 10811 | |
| 10810 |
JavaScript
mod_cband 간단 정리
|
| 10808 |
Flash
간단한 플래시 보완패치입니다.
1
|
| 10804 |
JavaScript
cs..cs2 버젼...윈도우즈 탐색기프리뷰 패치(psd,ai)...
3
|
| 10797 | |
| 28821 |
HTML
IeTagConvertor
|
| 10796 | |
| 10795 |
JavaScript
ncftp 서브 디렉토리 포함 모두 전송
|
| 10794 |
JavaScript
테이블 각 row 마우스오버시 색깔바꾸기
|
| 10792 | |
| 10789 |
MySQL
apache - mod_ssl 설치하기
2
|
| 10785 | |
| 10781 | |
| 10780 |
정규표현식
자바스크립트 이메일 체크 함수
|
| 28820 |
HTML
PHP에서 홈페이지 주소 검사
|
| 10776 |
PHP
문자셋(인코딩 바꾸는 팁
3
|
| 10769 |
JavaScript
당장써먹어야 할 팁) 앞으로 gif는 물러가고 png시대가 될거 같네요
6
|
| 10766 |
JavaScript
full-down메뉴[펌]
2
|
| 10765 |
JavaScript
플래쉬 무비 전체 화면으로 뜨게 하는 fscommand
|
| 10758 |
JavaScript
코딩시 테이블을 줄입시다.
6
|
| 28818 | |
| 10754 |
JavaScript
모든 폰트 설정 한번에 바꾸기(식별자 *의 사용법)
3
|
| 10753 | |
| 10750 | |
| 28817 |
HTML
자바스크립트에서 변수 없애기
|
| 10749 | |
| 10748 | |
| 10747 | |
| 10746 |
JavaScript
[소개]윈도우 미디어 플레이어 - 컨트롤 버튼
|
| 10740 |
JavaScript
iframe사용시 높이 자동 조정
5
|
| 10738 |
Flash
플래시 무비에 레이어 올리기
1
|
| 10735 |
JavaScript
도움말 띄우기 - 관리자 페이지에 있는 것을 추림
2
|
| 10734 | |
| 28812 | |
| 10730 | |
| 10726 | |
| 10725 |
기타
자바스크립트 기초문서
|
| 28811 | |
| 10724 |
JavaScript
숫자를 한글로 변환하기
|
| 10723 |
JavaScript
디렉터리 파일 찾기 순서 DirectoryIndex
|
| 10722 | |
| 10721 | |
| 10717 | |
| 10716 |
기타
Apache 보안 팁
|
| 10715 |
JavaScript
문서루트 위치 DocumentRoot
|
| 10713 |
Linux
lilo.conf
1
|
| 10712 | |
| 10711 | |
| 10710 |
JavaScript
웹 서버가 기다리는 포트(Port)
|
| 10709 |
JavaScript
logrotate.conf의 설정및 옵션에 대한 설명
|
| 10708 |
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기