次の数があるとしましょう。
番号 = 2001000200030
最初の桁を取得して変数に格納するにはどうすればよいですか? 次に、次の 4 桁を取得して別の変数に格納しますか? すると次の4桁が……
したがって、出力は次のようになります。
最初 = 2;
ファーストフォー = 0010
秒4 = 0020
サードフォー = 0030
ありがとうございました。お時間をいただきありがとうございます。
次の数があるとしましょう。
番号 = 2001000200030
最初の桁を取得して変数に格納するにはどうすればよいですか? 次に、次の 4 桁を取得して別の変数に格納しますか? すると次の4桁が……
したがって、出力は次のようになります。
最初 = 2;
ファーストフォー = 0010
秒4 = 0020
サードフォー = 0030
ありがとうございました。お時間をいただきありがとうございます。
数字の処理に固執できるのに、なぜ文字列を使用するのでしょうか? モジュロと除算を 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;
}
数値は 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);