1

次の数があるとしましょう。

番号 = 2001000200030

最初の桁を取得して変数に格納するにはどうすればよいですか? 次に、次の 4 桁を取得して別の変数に格納しますか? すると次の4桁が……

したがって、出力は次のようになります。

最初 = 2;

ファーストフォー = 0010

秒4 = 0020

サードフォー = 0030

ありがとうございました。お時間をいただきありがとうございます。

4

3 に答える 3

4

数字の処理に固執できるのに、なぜ文字列を使用するのでしょうか? モジュロと除算を 10 の累乗で使用して、数字で分割できます。

#include <stdio.h>

int main(void) {
    long long number = 2001000200030LL;

    /* Find power of 10 for top digit */
    long long currentDigit = 1LL;
    while((currentDigit * 10LL) < number) currentDigit *= 10LL;

    printf("First digit = %lld\n", number / currentDigit);
    number %= currentDigit;

    /* Read off groups of four digits */
    while(currentDigit >= 10000LL)
    {
        long long nextFour;
        currentDigit /= 10000LL;
        nextFour = number / currentDigit;
        number %= currentDigit;
        printf("Next four = %04lld\n", nextFour);
    }

    /* Output any remaining digits not covered by a group of four */
    if (currentDigit > 1LL)
    {
        printf("Remaining digits = ");
        for(currentDigit /= 10LL; currentDigit > 1LL; currentDigit /= 10LL)
        {
            printf("%lld", (number / currentDigit) % 10LL);
        }
        printf("%lld\n", number % 10LL);
    }

    return 0;
}
于 2013-05-01T23:36:04.053 に答える
2

数値は 2 進数でコンピューターに格納されます。このため、整数には個々の数字を区別する能力がありません。

数値を文字列に変換し、必要な部分を抽出します。必要に応じて、各部分を数値に戻すこともできます。(おそらく、文字列の一部を抽出するもっときれいな方法があります)

また、このコードはこの不自然な例のためのものです。整数が不明な場合、このコードは想定を安全に行うことができません。

long long number = 2001000200030LL;

// convert number to string
char string[64];
sprintf(string, "%lld", number);

// access individual digits
string[0] (first digit)
string[1] (second digit)

// copy first four digits into an int
char firstFour[5]
memcpy(firstFour, string, 4)
firstFour[4] = "\0"; // null terminate
int firstFourInt = atoi(firstFour);

// copy second four digits into an int
char secondFour[5]
memcpy(secondFour, string + 4, 4)
secondFour[4] = "\0"; // null terminate
int secondFourInt = atoi(secondFour);
于 2013-05-01T22:48:06.407 に答える