두 개의 정수를 입력으로받는 프로그램을 작성하십시오. 첫 번째는 임의의 정수일 수 있으며 두 번째는 첫 번째 숫자의 자릿수보다 작거나 같습니다. 이 숫자 a
들을 b
각각 이라고하자 .
프로그램은 다음을 수행합니다
1
끝에 s 의 최소 수를 연결하여a
자릿수를a
으로 나눌 수b
있습니다.- 분할
a
마다 함께b
자리. - 각 섹션의 숫자를 곱하십시오.
- 제품을 함께 연결하십시오 (숫자 중 하나가 0이면 연결
0
). b
숫자 보다 적은 숫자가 형성 될 때까지이 과정을 반복하십시오 . 프로세스 수뿐만 아니라 출력으로 이것을 인쇄하십시오. 단위는 필요하지 않지만, 최종 횟수와 반복 횟수 사이의 분리 형태입니다.
다음 테스트 사례에서는 이해를 돕기 위해 개별 단계가 표시됩니다. 프로그램이 단계를 표시 할 필요는 없습니다.
테스트 사례 1
1883915502469, 3
단계
1883915502469 //Iteration 1
188391550246911
188 391 550 246 911
64 27 0 48 9
64270489 //Iteration 2
642704891
642 704 891
48 0 72
48072 //Iteration 3
480721
480 721
0 14
014 //Iteration 4
0
샘플 출력 :0, 4
테스트 사례 2
792624998126442, 4
단계
792624998126442 //Iteration 1
7926249981264421
7926 2499 8126 4421
756 648 96 32
7566489632 //Iteration 2
756648963211
7566 4896 3211
1260 1728 6
126017286 //Iteration 3
126017286111
1260 1728 6111
0 112 6
01126 //Iteration 4
01126111
0112 6111
0 6
06
샘플 출력 :06, 4
프로그램은 if 오류를 반환해야합니다 (또는 아무것도 인쇄하지 않아야 함) b>len(a)
. 또한 b
1과 같거나 프로그램이 무한 루프를 발생시킵니다.
이것은 코드 골프이므로 표준 규칙이 적용됩니다. 바이트 단위의 최단 코드가 이깁니다.
답변
답변
펄 6, 116 바이트
my ($a,$b)=@*ARGS;for 0..* {if $b>$a.chars {$_&&say "$a,$_";last};$a=map({[*] @_},($a~1 x$b-1).comb.rotor($b)).join}
my ($a,$b)=@*ARGS;
for 0..* {
if $b>$a.chars {$_&&say "$a,$_";last}; # you need a 「;」 if you remove the newline
$a=map(
{[*] @_},
($a~1 x$b-1).comb.rotor($b)
).join
}
답변
Pyth, 32 바이트
IglzQf<l=zjk*MsMMc+z*\1%_lzQQQ)z
두 줄로 입력 한 a
다음을 입력합니다 b
. 두 줄에 출력을 제공하고 작업 뒤에 결과를 제공합니다.
인주: +z*\1%_lzQ
촙: c ... Q
정수 목록으로 변환 : sMM
제품을 가져 가십시오 : *M
str으로 다시 변환 : jk
다시 할당 : =z
종료 확인 : <l ... Q
반복 인쇄 수행 : f ... )
인쇄 결과 : z
아무것도 인쇄 할 것인지 초기 확인 : IglzQ