내부 루프가 없어야합니다 (if(flag)
). 그것은 외부 루프의 처리를 방해합니다.
그 시점에서 원하는 것은 플래그가 설정된 경우 문자를 출력하는 것입니다.
그리고 그 위에 비트의 인쇄는 첫 번째 비트의 감지 밖에 있어야합니다.
다음 의사 코드
내가이 접근 줄 방법을 보여줍니다 코드의
set printing to false
if carry is 1:
output '1:'
for each bit position i:
if c[i] is 1:
set printing to true
if printing:
output c[i]
if not printing:
output 0
첫 번째 블록은 캐리와 정확하게 출력 수에 변경해야 할 수 있습니다. 당신이 값 2와 캐리와 함께 결국 예를 들어, 당신이 중 하나를 원하는 것 :
1:10 (or some other separator)
100000000000000000000000000000010 (33 digits)
단순히 가장 왼쪽 비트는 것을 표시없이 110
을 출력하는 캐리가 될 수 중 하나
마지막 블록은 더 1 비트가 없었다 때문에, 그렇지 않으면 아무것도 인쇄하지 않을 것이다 0 값에 대한 몇 가지 출력을 보장을 실시하고 있습니다.
carry와 value 사이에 구분자를 출력해야하는지 (그리고 해당 행을 주석으로 남겨 두어야하는지) 여부에 관계없이 carry를 사용하여 처음에 printing
을 true로 설정해야합니다. 당신이 괜찮을 것 같네요 코멘트에서 C++로의 전환을 완료 한 이후,
if carry is 1:
output 1
set printing to true
그리고 :
if carry is 1:
output '1 '
과 : 두 가지 옵션은 각각 일 것이다.당신은 작동하지 않는 상태,하지만 난 당신의 코드에 입력 그것은 10
를 출력 괜찮 았는데 :
#include <iostream>
int main(void)
{
int i;
int carry = 0;
int c[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0};
bool print = false;
// This is the code you gave in the comment, slightly modified.
// vvvvvv
if(carry == 1) {
std::cout << carry << ":";
}
for (i = 0; i < 32; i++) {
if (c[i] == 1) {
print = true;
}
if (print) {
std::cout << c[i];
}
}
// ^^^^^^
std::cout << std::endl;
return 0;
}
학교 숙제를? –
@Pier 예, 대부분의 작업을 완료했습니다. 앞에 0을 제거하는 방법을 알아낼 수 없습니다. – Blake