2012-02-15 5 views
19

私はCで複数桁の整数を持っているとします。単精度の整数に分割したいと思います。C:複数桁の数字を別々の変数に分割する方法は?

1231,2,3となる。

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

+0

除算と残余。 –

+0

小数点は「%10」を意味します。 –

+2

あなたのintが 'char'データ(ユーザまたはテキストファイルからの入力)として始まった場合、最初にintに変換しないでください(' scanf'、no atoi' ...)。数字を区切ります。 – pmg

答えて

27
int value = 123; 
while (value > 0) { 
int digit = value % 10; 
// do something with digit 
value /= 10; 
} 
+5

このアルゴリズムは逆の順序で数字を発行します... – Matze

2

ヒントとして、数字のn番目の数字を取得するのは簡単です。 10 n回で割り、その後、MOD 10、またはC:

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

これはn桁ではありません。これは最下位から始まるn桁目です –

+0

最下位桁は0とはみなされませんか? – Dave

+3

よく、私は123の最初か0番目の数字は3ではなく1であると考えます。 –

0

123の最後の桁が123パーセント10 であなたは10分の123を実行して、123の最後の桁を削除することができます - 整数除算を使用すると、これはあなたに12を与えます。 "あなたが持っている桁数を知るにはどうすればよいですか"についての質問に答えるには - 上記のようにしてください。

5

まず、数字を数える:

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; 
} 
+1

今の回答、より良い例 – moffeltje

0

を私はコードの一部を下回ると思います....

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

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

//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

我々は「(++ < 2)しばらく」で3 arguments.Hereとの関数としてこのプログラムを使用することができ、2は、必要な桁数が(1つの引数として与えることができます)の一切と2を交換しないであなたが必要とする数字。最後の特定の数字が必要ない場合は "z/= pow(10,6)"を、必要がない数字の6を(別の引数として与えることができます)、3番目の引数はあなたが壊す必要がある番号。

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
//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

私はからコードに基づいてこれを作っ@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]); 

} 

これはとてもうまく動作します、ありがとう!

-1

あなたは分割して征服できますが、すべての算術ライブラリを書き換えています。あなたは数あれば、あなたがそれを割った後の余りを意味10%を、使用することができます私は多倍精度ライブラリhttps://gmplib.orgを使用することをお勧めしかし、もちろん、それは良い練習

+0

これは質問への答えを提供しません。十分な[評判](https://stackoverflow.com/help/whats-reputation)があれば、[投稿にコメントする]ことができます(https://stackoverflow.com/help/privileges/comment)。代わりに、[質問者からの明確化を必要としない回答を提供する](https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-c​​an- i-do-代わりに)。 - [レビューの投稿](レビュー/低品質の投稿/ 17348132) – teppic

+0

このリンクは質問に答えるかもしれませんが、回答の重要な部分をここに含めて参考にしてください。リンクされたページが変更された場合、リンクのみの回答は無効になります。 - [レビューの投稿](/レビュー/低品質の投稿/ 17348132) – primpap

0

です。したがって、123 % 10は3であり、残りは3であるため、123から3を減算し、次に120であり、次に120である10を12で除算します。そして、同じプロセスを実行します。

関連する問題