ID非公開

2020/6/5 3:19

33回答

C言語プログラミングの問題です。

C言語プログラミングの問題です。 3^1000の桁数を求めよ。 よろしくお願いします。

C言語関連259閲覧

ベストアンサー

0

C言語ぽくやってみました。 pow(3.0, 1000.0)だとオーバーフローするのでpow(3.0, 500.0)で計算しています。 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> #include <math.h> int main(void) {     char s[20];     double v = pow(3.0, 500.0); // 指数形式で代入     sprintf(s, "%e", v); // 指数を取り出す     int exp;     sscanf(strrchr(s, 'e')+1, "%d", &exp); // 仮数を取り出す     double n;     *strrchr(s, 'e') = '\0';     sscanf(s, "%lf", &n); // 桁数を計算する     int d_cnt = exp*2 + 1; // 仮数の乗算で繰上りしたときは1桁増す     if (n*n >= 10.0)         d_cnt++;     printf("3^1000 の桁数は %d\n", d_cnt); }

その他の回答(2件)

0

floor(log10(3.0)*1000.0)+1.0 かな。 最初 flloor(logl10(powl(3.0,1000.0)))+1.0 としてしまって なんだこれはとか思ったんだが・・・ まあ、理系なら常識だから、 その程度変換できないのは、 かなり恥ずかしかった(^^;

1

常用対数を使ってください。

1人がナイス!しています