如何在c中存储pow(10,n)整数值,其中n可以<200?

时间:2015-07-27 13:04:39

标签: c numbers storage

#include<stdio.h>   
#include<math.h>     

int main(void)
{
    long int n;
    scanf("%d",&n);
    n=pow(10,n);
    printf("%ld\n",n);
    solve(n);
    return 0;
}

1 个答案:

答案 0 :(得分:2)

你需要使用double,而不是long(因为10 80 不适合64位long,它可以表示{{1}以下的数字3}})。但请阅读9223372036854775807,因为这是一个非常困难的主题(请注意the floating point guide数字与数学floating point不同。)

您可以尝试:

#include <stdio.h>   
#include <stdlib.h>
#include <math.h>     

int main(void) {
  int n = 0;
  if (scanf("%d",&n)<1) { perror("scanf"); exit(EXIT_FAILURE); };
  if (n < -256 || n > 256) 
    { fprintf(stderr, "wrong exponent %d\n", n);
      exit(EXIT_FAILURE); };
  double x = pow(10.0,(double)n);
  printf("ten power %d is %g\n", n, x);
  return 0;
}

(我删除了您未定义的solve电话;我测试了scanf的成功和n的范围

对于更大的指数,您可能需要使用real numbers bignums

不要忘记启用所有警告&amp;编译时调试信息。如果您使用gcc -Wall -Wextra -g编译原始代码,则会多次发出警告(每行几乎警告一次!)。