以下のコードは、(int
データ型)では10桁まで細かく動作しますが、10桁を超える数値の場合は失敗してしまいましたので、私はunsigned long long int
を試しました。しかし今、私の出力は15に固定されています、なぜidk?私は非常にCの新しい、私は平凡なpythonの背景があると思う!10桁を超える整数で演算した場合、Cの出力結果がぎこちないのはなぜですか?
私はあなたが間違った書式指定子を使用しているgccの(Ubuntuの5.4.0-6ubuntu1〜16.04.1)5.4.0 20160609
#include <stdio.h> //Get number of digits in a int
unsigned long long int get_len();
void main() {
unsigned long long int num;
printf("Enter the number:");
scanf("%d",&num);
printf("\nThe length of number is is: %d \n",get_len(num));
}
unsigned long long int get_len(unsigned long long int z) {
unsigned long long int i = 1;
while (1) {
if ((z/10) > 1) {
//printf("Still greater than 1");
i++;
z = z/10;
continue;}
else {
return(i+1);
break;}}}
あなたは[GMPlib](http://gmplib.org/のようないくつかの[BIGNUM](https://en.wikipedia.org/wiki/Arbitrary-precision_arithmetic)ライブラリをすることができ) –
時間を節約し、すべてのコンパイラの警告を有効にします。 – chux
Pythonは必要に応じて自動的にbignumに切り替わりますが、Cは「メタルに近い」ものであり、必要なときに任意のタイプの番号を昇格させることはできません。したがって、現代のコンパイラでは64ビットである 'unsigned long long int'で動作するようにコードを修正しても、*小数点以下20小数点を超えることはできません。 – usr2564301