数学建模社区-数学中国

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

作者: 蛋疼○▲○    时间: 2013-8-12 10:14
标题: 为什么我每次用C语言的pow函数算5的100次方,得出的结果都和课本的不一样?
为什么我每次用C语言的pow函数算5的100次方,得出的结果都和课本的不一样?& R& k/ X0 O: d1 \

作者: 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 0 I7 M8 Q$ h+ n. |  t
有源程序吗
  1. #include<stdio.h>
    9 F0 T& {+ j6 K$ {" T3 F7 n& ]
  2. #define max_size 100000
    ' m" \2 @: N0 z& I+ }; o- Z
  3. #define pow_count 1000//次数6 m$ J# l! i+ y, C; L& |, ]
  4. int a[max_size];
    6 T" u5 |" ^5 ^* D  j
  5. void add_bite(int i)
    4 ]) |3 i* K7 z( P
  6. {. v9 d4 U+ K$ A4 U; o
  7.     if((a[i]+1)>10)  ; x4 U6 B# H* W. k$ v3 e
  8.     {
    ' G3 l3 b: l; }, f( J- c
  9.          a[i]=(a[i]+1)%10;7 R8 C+ Q$ J8 c" L5 U, r3 z
  10.          add_bite(i+1);
    4 _0 S. P: M" W, D9 B
  11.      }
    + B9 t# V" y; l* B# T0 ^
  12.     else
    6 C9 ]5 D# r8 P% K3 c8 x3 h3 w6 E
  13.     {1 M1 b( u! u: H. x; K
  14.         a[i]+=1;
    3 o) u$ Y( `9 J& A) Z7 k; c) u- f5 U
  15.     }' ?4 L) Y' I& \5 I0 x
  16. }
    ; j/ f) x) S& x  k
  17. void main()
    # Z7 T  Y% n9 i* I4 ]; P; Z
  18. {   6 f6 L6 r) q9 p. R/ d/ @+ `
  19.     int sum,i,j;$ r% D/ U; d0 M! I) w$ }% E
  20.     a[0]=2;! x. F. }5 |% ]" B
  21.     sum = 0;/ U. @% C: z, y7 |$ H+ \
  22.     for(i=1;i<max_size;i++)
      ^; O4 j4 R9 a+ W
  23.     {/ f) @) t/ b* z: U! U2 v. U1 s
  24.         a[i] = 0;   
    - r$ w! p& j' x8 H7 l
  25.     }
    ) H$ y! c/ M5 d) U4 Q- o/ }
  26.     for(i = 1;i<pow_count;i++)
    ; u: d/ [3 \0 X9 A( I
  27.     {
    8 W1 y" Q9 F. D- j2 A: b
  28.         for(j=0;j<max_size;j++)
    1 n0 u7 F$ @' b4 I5 n' ^, T2 }
  29.         {& F: l4 {8 K( o, w2 l' p$ Q# R- I
  30.             if(a[j]*5>=10)! `8 F; w; Q3 C5 K4 b% X) }1 U
  31.             {
    $ \1 q) T5 |- @
  32.                 a[j] = a[j]*5%10;
    ' J  V; P! I& L4 J
  33.                 add_bite(i+1);
    : V; Q1 B" Q# e  z$ r
  34.             }
    ; A! _( x; z! H3 f% U9 f
  35.             else6 }! k( a9 m0 O
  36.             {
    + u8 }8 `( v5 K4 j
  37.                a[j]= a[j]*5;& |9 ?0 }( y* ]% Y0 v$ ~- Z
  38.              }; \$ h2 u! V$ R; T# z
  39.          }  
    + Z5 q1 E6 I+ d, L. w' c2 u
  40.     }   
    * A( R4 S$ \4 u
  41.     for(i=max_size;i>0;i--); B+ y" x  d" N4 E
  42.     {
    $ F1 W/ ?4 |5 R. R! F6 Y" R8 P
  43.         if(a[i]!=0) break;/ s  }& b% c6 w( a  I
  44.     }
    / [1 Q3 ^0 N7 g% w5 ?, G% a' P: q
  45.     for(j=i;j>0;j--); h& T! _1 u0 |+ K
  46.     {) F4 Y' I/ I, g  z
  47.         sum++;
    1 j3 Y, n1 w5 k) W
  48.         printf("%d",a[j]);
    6 \  I1 k5 F1 S
  49.      }7 A0 t( z( I# f, g" E& c
  50.      printf("\n%d",sum);
    ! B( Q% b! [: b5 s; t* m
  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 ; Z6 [+ P" j7 R" J% k: b9 z; e
LZ考虑一件事:int定义变量是有范围的,5的100次方超出整型定义范围(32767好像),可能要试一下长整型 lon ...

; b4 L! U3 n5 r, s( x所以应该用数据移位乘法解决范围问题




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