数学建模社区-数学中国

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

作者: 蛋疼○▲○    时间: 2013-8-12 10:14
标题: 为什么我每次用C语言的pow函数算5的100次方,得出的结果都和课本的不一样?
为什么我每次用C语言的pow函数算5的100次方,得出的结果都和课本的不一样?- C1 o1 j3 f0 ?; [5 q. U7 @

作者: 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
- a) z! u: M3 W8 B8 r有源程序吗
  1. #include<stdio.h>9 B4 [) r' b. _* g: K1 e
  2. #define max_size 1000001 B6 T6 u- C& R% @4 V' N8 S9 m' u
  3. #define pow_count 1000//次数
    6 l$ x; K  i1 I- ?! C2 n
  4. int a[max_size];
    " A9 }  S% F& b) k# l1 ^6 |
  5. void add_bite(int i)
    / A& J( u5 S- z( B! {
  6. {
    0 c4 ]3 i4 k4 i3 ?) B8 d
  7.     if((a[i]+1)>10)  
    % w: P( C; G0 k, Q0 q
  8.     {
    * R5 V8 [/ I! p0 D, O
  9.          a[i]=(a[i]+1)%10;  ^- ~* p+ U) j' `2 p
  10.          add_bite(i+1);2 d, p- O: G* `  k
  11.      }6 p2 W: I9 U+ i
  12.     else2 U' G5 a" d" D7 i! j* U9 t5 H
  13.     {
    0 S3 ]  V4 P6 [
  14.         a[i]+=1;  j0 N6 m) i2 w( L5 L0 N+ x: n- q- k
  15.     }
    5 \+ p6 j4 x8 c* m$ H: A
  16. }/ U. G. R  V+ w9 o
  17. void main()7 \/ n5 q/ n$ \8 {; }
  18. {   
    6 }6 X) }" [, J! U; {3 q% F" Q
  19.     int sum,i,j;1 r3 M6 n6 h- B. ?2 t3 I! r3 B2 l
  20.     a[0]=2;
    2 |2 T: c4 U. q' n5 j
  21.     sum = 0;
    1 i6 v: ?& {$ }6 F( W* d& z
  22.     for(i=1;i<max_size;i++)  I4 [8 D( X, R. E6 p% O
  23.     {
    : B! _2 u$ }" R% c9 O- Q) j
  24.         a[i] = 0;    0 r6 q1 Z% M$ j3 T' U
  25.     }
    " y5 |9 o$ L9 a# }7 L" ?2 |# d- U8 E8 l
  26.     for(i = 1;i<pow_count;i++)7 ^' o* _1 o7 `6 T1 X3 D; L
  27.     {
    % b% ]6 b* I8 I' b
  28.         for(j=0;j<max_size;j++)7 l, H5 i. L0 S; l$ t5 x8 H
  29.         {
    ! ?8 w5 [  j4 e$ P$ i' v; l
  30.             if(a[j]*5>=10)
      s# h: }+ N& r; ~1 f/ ^7 ]
  31.             {4 L* J: P( R: E4 `& ]8 a
  32.                 a[j] = a[j]*5%10;
    : l( ~7 t: i) V! l+ d& B0 [
  33.                 add_bite(i+1);7 H# A7 T1 d6 w; z+ H5 X
  34.             }7 ^. Y3 @1 U7 t/ T- H% o3 a
  35.             else
    - ~+ `" r" @3 W1 U
  36.             {1 i! B9 j+ G  {- m
  37.                a[j]= a[j]*5;
    5 F8 X, x" T$ L0 O8 p3 H
  38.              }3 s5 R8 k9 ^% x' P; ^8 c2 t2 O
  39.          }  ! v1 s) W8 M  m# z2 G# h
  40.     }   / ~. t+ v7 k/ l
  41.     for(i=max_size;i>0;i--)8 X% a+ H0 ~. ]+ g+ K) Z
  42.     {) A* e) R( w% m0 W' Q/ i7 Y
  43.         if(a[i]!=0) break;$ b; F/ S& I' n- V) i
  44.     }
    . J" \5 L- c" W& B) Z
  45.     for(j=i;j>0;j--)% H2 E" l) P* N6 C2 i4 N( ^0 n
  46.     {
    . x7 z( _. I: F) ?
  47.         sum++;
    2 K# v; j: b. g2 Q5 `* k
  48.         printf("%d",a[j]);
    ) c' P: u2 j, M
  49.      }% x  P1 ?, X- j4 _
  50.      printf("\n%d",sum);
    / [' o8 M" n4 D3 f' ]
  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   n2 z% w9 v. z7 @* F& [! R
LZ考虑一件事:int定义变量是有范围的,5的100次方超出整型定义范围(32767好像),可能要试一下长整型 lon ...

3 ~  D& G; t, e所以应该用数据移位乘法解决范围问题




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