数学建模社区-数学中国

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

作者: 蛋疼○▲○    时间: 2013-8-12 10:14
标题: 为什么我每次用C语言的pow函数算5的100次方,得出的结果都和课本的不一样?
为什么我每次用C语言的pow函数算5的100次方,得出的结果都和课本的不一样?4 y; h0 w# n9 {. g4 j& v9 A

作者: 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
+ {& t+ n2 U5 {9 j+ P2 `& t% S有源程序吗
  1. #include<stdio.h>
    5 c: u% I4 a" g7 m  m4 {* p
  2. #define max_size 100000
    2 j3 @- p+ S  l. \) t+ |6 J4 t
  3. #define pow_count 1000//次数( N8 A. c! W) S# ]9 M% ^5 X, q
  4. int a[max_size];3 I4 O+ X1 M+ ]. X! r
  5. void add_bite(int i)5 ^3 E. V- M0 G) F$ c% c3 _' z
  6. {
    1 @$ A: }2 C* f, o. q
  7.     if((a[i]+1)>10)  ! s; r( @$ F8 u$ j% q( Q8 v* G
  8.     {
    / l& M2 b- I4 z1 @. f0 u1 g$ r9 A: s
  9.          a[i]=(a[i]+1)%10;
    3 H) n$ g! W/ T! ^# Z, k+ I, y) U
  10.          add_bite(i+1);
    ! B5 K6 t3 |5 b" j/ g% J
  11.      }
      V& X0 M/ \- A
  12.     else
    3 Y/ w* I8 [& s8 ^, ~( n, L
  13.     {8 G9 B& k' c( F) J0 Z3 [7 c
  14.         a[i]+=1;' e6 j1 m; u  o
  15.     }, U9 E* y& D* c) n
  16. }% K! S+ _' F! s; b- q; ^
  17. void main()
    ; ]0 Y6 H. S% b3 D% i8 W! U
  18. {   " f0 D6 f/ ^6 v% e# s8 a* c
  19.     int sum,i,j;# W, _# L5 }, H+ ~5 W! x
  20.     a[0]=2;
    6 B4 v; s2 c  {  @
  21.     sum = 0;& {6 |9 w/ K' q& U/ V' |
  22.     for(i=1;i<max_size;i++)" U! D( T5 n5 n4 L5 k# X$ v! `
  23.     {
    + o' {( U* ~* i
  24.         a[i] = 0;    ) f% U: L. V% b# E4 D" V, Y
  25.     }) f! ^1 y6 U- {% ~# n, D& Z5 b) m! R
  26.     for(i = 1;i<pow_count;i++)
    ! N5 Z1 ^8 ^: P
  27.     {: [- w5 h5 O2 f0 E+ t! G
  28.         for(j=0;j<max_size;j++), M0 W7 j* i7 f5 j5 G
  29.         {1 ^. k' A2 x  C- j5 O
  30.             if(a[j]*5>=10), v2 t1 R7 H! R, t' _
  31.             {" L& @4 b! N& f9 [( r# U! n3 J3 X$ y
  32.                 a[j] = a[j]*5%10;' D) J7 E/ W) L  @1 @6 v
  33.                 add_bite(i+1);+ M* K4 [3 Z% O  A+ e1 f* k
  34.             }0 P9 ^; t6 T  u
  35.             else; q; T7 @0 A+ H- |' h4 S
  36.             {0 R& H. j2 _5 I4 M' {& P2 C1 @
  37.                a[j]= a[j]*5;
    + S. t9 d/ p: P
  38.              }
    ' J8 d% Q5 A  ]# R9 D
  39.          }  
    . X: U9 \5 N( M; L1 w+ h6 m
  40.     }   # [( `( m5 ~/ U! v. H
  41.     for(i=max_size;i>0;i--)8 _) M- M/ D2 `- L
  42.     {
    . a7 a$ \& n+ p( Q( K" i( o
  43.         if(a[i]!=0) break;
    + l$ C- C) d$ ?& [& [
  44.     }) |3 k0 i3 q7 {. h+ _1 l+ S6 n6 w" a
  45.     for(j=i;j>0;j--)) j4 q# c$ _& i+ s4 b& O
  46.     {
    6 M" P+ P% k: P8 D
  47.         sum++;
    2 e, F4 K9 T0 `/ u9 R, @: X$ b: r
  48.         printf("%d",a[j]);! X( A  w4 `4 s" D, F7 x6 q- @3 x
  49.      }
    7 g7 k$ M3 o+ `) n
  50.      printf("\n%d",sum);
    $ U" {% z$ {( o3 `5 A. Y& E& 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 6 L0 V( L" t3 G+ {6 }" G
LZ考虑一件事:int定义变量是有范围的,5的100次方超出整型定义范围(32767好像),可能要试一下长整型 lon ...
! B  a+ G/ I8 J" k/ B+ g
所以应该用数据移位乘法解决范围问题




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