私はCで複数桁の整数を持っているとします。単精度の整数に分割したいと思います。C:複数桁の数字を別々の変数に分割する方法は?
123
は1
,2
,3
となる。
どうすればよいですか?特に、整数の桁数がわからない場合はどうすればよいですか?
私はCで複数桁の整数を持っているとします。単精度の整数に分割したいと思います。C:複数桁の数字を別々の変数に分割する方法は?
123
は1
,2
,3
となる。
どうすればよいですか?特に、整数の桁数がわからない場合はどうすればよいですか?
int value = 123;
while (value > 0) {
int digit = value % 10;
// do something with digit
value /= 10;
}
このアルゴリズムは逆の順序で数字を発行します... – Matze
ヒントとして、数字のn番目の数字を取得するのは簡単です。 10 n回で割り、その後、MOD 10、またはC:
int nthdig(int n, int k){
while(n--)
k/=10;
return k%10;
}
これはn桁ではありません。これは最下位から始まるn桁目です –
最下位桁は0とはみなされませんか? – Dave
よく、私は123の最初か0番目の数字は3ではなく1であると考えます。 –
123の最後の桁が123パーセント10 であなたは10分の123を実行して、123の最後の桁を削除することができます - 整数除算を使用すると、これはあなたに12を与えます。 "あなたが持っている桁数を知るにはどうすればよいですか"についての質問に答えるには - 上記のようにしてください。
まず、数字を数える:
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;
}
今の回答、より良い例 – moffeltje
を私はコードの一部を下回ると思います....
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;
}
を助けます
配列を使用せずに数字を同じ順序で区切りたい場合は、このコードを試してください。
//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);
}
我々は「(++ < 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;}
//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
私はからコードに基づいてこれを作っ@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]);
}
これはとてもうまく動作します、ありがとう!
あなたは分割して征服できますが、すべての算術ライブラリを書き換えています。あなたは数あれば、あなたがそれを割った後の余りを意味10%を、使用することができます私は多倍精度ライブラリhttps://gmplib.orgを使用することをお勧めしかし、もちろん、それは良い練習
これは質問への答えを提供しません。十分な[評判](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-can- i-do-代わりに)。 - [レビューの投稿](レビュー/低品質の投稿/ 17348132) – teppic
このリンクは質問に答えるかもしれませんが、回答の重要な部分をここに含めて参考にしてください。リンクされたページが変更された場合、リンクのみの回答は無効になります。 - [レビューの投稿](/レビュー/低品質の投稿/ 17348132) – primpap
です。したがって、123 % 10
は3であり、残りは3であるため、123から3を減算し、次に120であり、次に120である10を12で除算します。そして、同じプロセスを実行します。
除算と残余。 –
小数点は「%10」を意味します。 –
あなたのintが 'char'データ(ユーザまたはテキストファイルからの入力)として始まった場合、最初にintに変換しないでください(' scanf'、no atoi' ...)。数字を区切ります。 – pmg