0

質問: int の数値を入力してください 例: ABCD、ABCD = AB*CD かどうかを確認してください

(この数値が何桁であるかはわかりません。正の整数であることだけは知っておいてください。

はい、桁数が奇数の場合、結果は No と結論付けることができます。

例えば:

    Enter a number: 88
    Output: No

    Enter a number: 12600
    Output: No

    Enter a number: 116725
    Output: Yes, 116 * 725 = 116725 (**this is just example, 

not actual result, just help to understand how output look like**)

問題は、これを解決するためにarrayjump、およびbitwiseを使用できないことです。はい、配列を使用できる場合は、言うことはあまりありません。入力数値を配列に入れ、最初の半分をチェックして、残りの半分を掛けます.... bla..bla ...この問題を解決するには、配列を使用せずにIDEAの助けが必要です.今、私は立ち往生しています!どうもありがとうございました!

4

7 に答える 7

16

あなたのプログラムはNo、すべての入力に対して安全に出力できます。証拠:

A*B = A*10^k + B で、A と B > 0 および B < 10^k となるような整数 A と B を探しています。

A*B = A*10^k + B の場合、B = 10^k + B/A > 10^k です。しかし、B は 10^k 未満でなければならないので、これは矛盾しています。したがって、そのような A と B は存在しません。


より長い証明:

A*B = A*10^k + B で、A と B > 0 および B < 10^k となるような整数 A と B を探しています。

両側から B を引いて (A-1)*B = A*10^k を取得します。

A は右辺の因数なので、左辺の因数でもあります。しかし、A と A-1 は互いに素であるため、A は B を除算する必要があります。したがって、ある整数 n に対して B = n*A になります。

これで、A*B = A*10^k + n*A、または A*B = (10^k + n)*A となります。A > 0 なので、両辺を A で割り、B = 10^k+n を得ることができます。しかし、B は 10^k 未満であるはずだったので、これは不可能です!

于 2012-05-08T08:32:48.987 に答える
7

6桁の数字のヒント:

  • 最後の3桁を取得するには% 1000
  • 最初の3桁を取得するには、を使用します(int) X/1000

に注意して1000 == 10^3ください。

于 2012-05-08T07:31:26.940 に答える
6

入力を要求してから「いいえ」と出力するプログラムを作成します。

終わり。

于 2012-05-08T08:32:37.627 に答える
2

あなたが何をしようとしているのかはあまり明確ではありません。ABCD == AB*CDは4桁の数字を提案します。4桁の数字xの場合、上記のテストはになりますx == (x / 100) * (x % 100)1006桁の数字の場合は、に置き換え ます。1000より一般的には、偶数の場合は、を使用しnます 。ただし、奇妙な場合は、何を探しているのかわかりません。最後に示した例は、あなたが言及した基準を満たしていません。各半分の数字を並べ替えることができれば、問題はさらに複雑になります。n10^(n/2)n

于 2012-05-08T07:50:09.193 に答える
1

桁数を取得するには、1より小さくなるまで数を10で割る必要があった回数を数えます。

116725の場合、10で6回割る必要があります。その後、数値が奇数の場合はnoを出力するか、JamesKanzeやProblemFactoryで説明されているように結果を計算できます。

于 2012-05-08T08:02:53.633 に答える
1

完全な「C/C++」ソリューションは次のとおりです。

#include <stdio.h>

int main(void) {
    while (fgetc(stdin) != '\n');
    return puts("No.");
}
于 2012-05-08T12:13:19.503 に答える
1

文字列を読み取り、途中で分割し、両方の部分を int に変換できます。

int を読み取り、桁数を計算し (独自のループを作成するか、log 関数を使用して)、計算された桁数の後に int を分割することもできます。

また、int ABCD を取り、それを ABC と D に分割し、ABC から D に桁を移動するループを作成することもできますが、両方の桁数は同じではありません (ここで桁数を計算する必要はありません。あなたができる非常に簡単な比較があります)。

于 2012-05-08T07:40:18.533 に答える