web-dev-qa-db-ja.com

C:複数の数字を別々の変数に分解する方法は?

Cに複数桁の整数があるとします。これを1桁の整数に分割します。

12312、および3

特に整数の桁数がわからない場合、どうすればよいですか?

23
mugetsu
int value = 123;
while (value > 0) {
 int digit = value % 10;
 // do something with digit
 value /= 10;
}
32
Tony

まず、数字を数えます:

unsigned int count(unsigned int i) {
 unsigned int ret=1;
 while (i/=10) ret++;
 return ret;
}

次に、それらを配列に保存できます。

unsigned int num=123; //for example
unsigned int Dig=count(num);
char arr[Dig];
while (Dig--) {
 arr[Dig]=num%10;
 num/=10;
}
7
asaelr

ヒントとして、数字のn番目の数字を取得するのは非常に簡単です。 10 n回除算してからmod 10、またはCで:

int nthdig(int n, int k){
     while(n--)
         k/=10;
     return k%10;
}
1
Dave

配列を使用せずに数字を同じ順序で区切る場合は、このコードを試してください。

//Separate number digits
#include <stdio.h>
#include <math.h>

void main()
{
    int x, y, n = 0;

    scanf("%d", &x);

    //counting digits
    y = x;
    while (y != 0)
    {
        n += 1;
        y /= 10;
    }

    //printing separated digits
    int i;
    for (i = ceil(pow(10, (n - 1))); i != 0; i /= 10)
        printf("%d  ", (x / i) % 10);
}
0
Ahmad Kandil

@asaelrのコードに基づいて作成しました。

typedef struct digitsArrayPlusNumber {
    uint32_t *baseAddress;
    uint32_t number;
} digitsArrayPlusNumber;

digitsArrayPlusNumber *splitDigits (uint32_t inValue) {
    // based on code from [email protected]

    uint32_t inputValue = inValue;

    //Count digits

    uint32_t theCount = 1;
    while (inputValue /= 10)
        theCount++;

    // put in array
    uint32_t *arr = malloc(sizeof(uint32_t) * theCount);
    uint32_t Dig = theCount;
    while (Dig--) {
        arr[Dig]=inValue % 10;
        inValue /= 10;
        //  printf ("%d\n", arr[Dig]);
    }

    digitsArrayPlusNumber *dandn = malloc (sizeof(digitsArrayPlusNumber));

    dandn->baseAddress = arr;
    dandn->number = theCount;

    return dandn;

}

int main(int argc, const char * argv[]) {


    for (int d = 0; d < splitDigits(12345678)->number; d++)
        printf ("%u\n", (splitDigits(12345678)->baseAddress)[d]);

}

とてもうまくいきます、ありがとう!

0
Laserbeak
//Based on Tony's answer
#include <stdio.h> 
int nthdig(int n, int k){
    while(n--)
        k/=10;
    return k%10;
}

int main() {
    int numberToSplit = 987;
    printf("Hundreds = %i\n",nthdig(2, numberToSplit));
    printf("Tens     = %i\n",nthdig(1, numberToSplit));
    printf("Units    = %i\n",nthdig(0, numberToSplit));
}

これにより、次の印刷結果が得られます。

数百= 9

十= 8

単位= 7

0
Rupert Russell

以下のコードが役立つと思います...

temp = num;
while(temp)
{
    temp=temp/10;
    factor = factor*10;
}

printf("\n%d\n", factor);
printf("Each digits of given number are:\n");

while(factor>1)
{
    factor = factor/10;
    printf("%d\t",num/factor);
    i++;
    num = num % factor;
}
0
Atul Khanduri

%10を使用できます。これは、それを分割した後の数値の場合の余りを意味します。そう 123 % 10は3です。剰余が3であるため、123から3を減算してから120になり、120を10で割って12になります。同じプロセスを実行します。

0
user9053402

このプログラムは、3つの引数を持つ関数として使用できます。ここで、「while(a ++ <2)」では、2は必要な桁数です(1つの引数として指定できます)。ここで、最後の特定の数字を必要としない場合、「z/= pow(10,6)」を使用できます。必要のない数字の数で6を置き換えます(別の引数として与えることができます)。あなたが破る必要がある番号。

int main(){
long signed c=0,z,a=0,b=1,d=1;
scanf("%ld",&z);
while(a++<2){
       if(d++==1) 
       z/=pow(10,6);
       c+=(z%10)*b; 
       z/=10;
       b*=10;}
        return c;}
0
Siddarth Sid

123の最後の桁は123%10です。123/ 10を実行すると、123の最後の桁をドロップできます。整数除算を使用すると、12が得られます。 -上記の方法で試してみると、いつ停止するかを知る方法がわかります。

0
MK.