数学建模社区-数学中国

标题: 为什么我每次用C语言的pow函数算5的100次方,得出的结果都和课本的不一样? [打印本页]

作者: 蛋疼○▲○    时间: 2013-8-12 10:14
标题: 为什么我每次用C语言的pow函数算5的100次方,得出的结果都和课本的不一样?
为什么我每次用C语言的pow函数算5的100次方,得出的结果都和课本的不一样?
: ~1 B5 \* ~7 s0 {8 _5 H% }" |* c; }
作者: wangzheng3056    时间: 2013-8-12 10:18
c语言中int型double型都有固定的大小, int型在vc中占4字节,double占8字节,所以表示的固定大小肯定会有问题。建议用数组移位表示的方法计算这么大的数
作者: wangzheng3056    时间: 2013-8-12 10:25
建议你看看这篇帖子,里边有实现的方法2一千次的实现方法
作者: xx372859523    时间: 2013-8-12 14:37
有源程序吗
作者: Summershumo    时间: 2013-8-15 16:56
顶一下,,,,,,,,,,,,
作者: wangzheng3056    时间: 2013-8-15 17:00
xx372859523 发表于 2013-8-12 14:37
5 ~5 h6 Z/ ~( C有源程序吗
  1. #include<stdio.h>
    # p4 M: j& v/ ?, ^- i0 S
  2. #define max_size 100000" M% [% _& I2 C& ^
  3. #define pow_count 1000//次数/ }: X, ?4 |$ w
  4. int a[max_size];3 w4 z& e& I5 [+ a& \! K; h
  5. void add_bite(int i)6 k% f) @+ c$ N9 Q2 e) p% V& f$ l
  6. {, I6 e$ [( {. @: j' U
  7.     if((a[i]+1)>10)  / L4 w- n7 M) _: D
  8.     {
    6 F5 i% g; E( p7 F
  9.          a[i]=(a[i]+1)%10;
    / b5 n" W$ k8 V  M
  10.          add_bite(i+1);5 s! N/ g9 c( F$ R' X
  11.      }- `% Z' l$ e& }6 K
  12.     else. w: M. P% Q% [1 ]  p
  13.     {
    $ P. K* l. F6 k
  14.         a[i]+=1;3 U! C& _) A7 U1 h; ?" q2 Y
  15.     }" i$ B+ A. X+ T+ y) N0 M
  16. }
    ! B$ b/ v; x; F4 V
  17. void main(); k  h  k5 Y7 f
  18. {   
    , k+ }+ P2 L  K3 z; h" k) Z4 l
  19.     int sum,i,j;. H; f) h( D& [$ C3 y; i/ T* ^' ?! B
  20.     a[0]=2;
    2 M  `2 r$ \- M3 z
  21.     sum = 0;* @1 e0 \3 e" U' h0 o4 L* h
  22.     for(i=1;i<max_size;i++)
    7 K1 b) N4 r* p4 N9 |( r
  23.     {5 O4 {$ [$ Z- }& X$ g; _6 r, G, x1 N0 z  w
  24.         a[i] = 0;    / e3 o( ?* w& F& _. k0 Q
  25.     }
      L/ V/ w/ Q! U. Z. ^! X
  26.     for(i = 1;i<pow_count;i++)
    3 O& q) |% g6 k2 S
  27.     {
    ( s- Y; d/ ^, {. z2 ~! k
  28.         for(j=0;j<max_size;j++)
    8 D! i6 o8 v" }6 ?& m6 h
  29.         {/ F9 _: q+ l. F& A
  30.             if(a[j]*5>=10)
    % z; X$ R3 @- E; H
  31.             {
    , w( y% Y& k' ^  j/ r& t' ?0 A
  32.                 a[j] = a[j]*5%10;+ h& O0 }8 P2 @3 x
  33.                 add_bite(i+1);( @" T# @# {7 e4 V! G
  34.             }: k+ ~9 ?* b' ~* I( C: J; I8 f. x5 c0 k
  35.             else' {: ~, g. X2 n4 _7 [' z6 k
  36.             {
    $ j: h: U7 f8 ?: l4 X& |
  37.                a[j]= a[j]*5;
    ) g. B# w/ R' W# D2 i. u
  38.              }
    . x! N9 m0 y! S& l
  39.          }  0 T4 r1 D( V; v4 }% _: r- n
  40.     }   / a( F0 h8 \% n
  41.     for(i=max_size;i>0;i--)
    ) C0 f! [1 h+ K  y
  42.     {
    / j8 A" k& ?) M. T$ G4 T+ ]
  43.         if(a[i]!=0) break;4 J  L7 |  d8 W$ O3 d, F8 _0 n. B
  44.     }( _- Z% n& e0 F9 X( S9 a# w7 D
  45.     for(j=i;j>0;j--)
    5 l+ z/ e1 A7 B+ T
  46.     {. H+ O9 T; y; ?
  47.         sum++;$ F- u3 ~- q+ ]2 {2 y- ~/ g
  48.         printf("%d",a[j]);
    8 ~1 y: o& o& W( P
  49.      }2 N% V, E+ d+ O' u5 s
  50.      printf("\n%d",sum);
    ( R1 j, A% j  O6 U; o4 {! I
  51. }
复制代码

作者: xx372859523    时间: 2013-8-15 18:47
LZ考虑一件事:int定义变量是有范围的,5的100次方超出整型定义范围(32767好像),可能要试一下长整型 long int来定义sum。PS 5的100次方真心太大...
作者: wangzheng3056    时间: 2013-8-15 22:01
xx372859523 发表于 2013-8-15 18:47 # x& Q: N+ N# j) T4 [9 _1 ?' m
LZ考虑一件事:int定义变量是有范围的,5的100次方超出整型定义范围(32767好像),可能要试一下长整型 lon ...

5 O* X6 w( ]" r2 Z# P1 T所以应该用数据移位乘法解决范围问题




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5