内部ループ(if(flag)
)を使用しないでください。それは外側のループの処理を妨げます(i
)。
フラグが設定されていると、その時点で文字を出力するだけです。
さらに、ビットの印刷は最初のビットの検出の外にする必要があります。
次の擬似コードは、私はこれに近づくだろう方法を示しています。
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
コードの最初のブロックは、キャリー付き正確出力番号に変更する必要があるかもしれません。
1:10 (or some other separator)
100000000000000000000000000000010 (33 digits)
だけ左端のビットは、キャリーは可能性のいずれかであったことを表示なしで110
を出力する:あなたは値2とキャリーになってしまった場合たとえば、あなたはのいずれかをしたいと思います
キャリ付き2;または
6運ぶ
せずに最後のブロックは、あなたが何の1ビットがなかったので、それ以外は何も印刷しないだろう値0のためのいくつかの出力を持って保証します。
キャリーと値の間にセパレータを出力する必要があるかどうか(そしてその行をコメントにしたままにする)かキャリーを使用してprinting
を最初にtrueにする必要があるかどうかはわかります。 2つのオプションは、それぞれ次のようになります。
if carry is 1:
output '1 '
と:
if carry is 1:
output 1
set printing to true
そして、あなたは大丈夫でなければなりませんコメントにC++への変換を、やった以来。あなたはそれが動作しないと述べているが、私はあなたのコードで入力し、それがうまく働いた、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はい、私はそれのほとんどを行っています。先のゼロを取り除く方法を理解できません。 – Blake