zoukankan      html  css  js  c++  java
  • Exponentiation

     1 #include<iostream>
     2 #include <stdio.h>
     3 using namespace std;
     4 #define MOD 10
     5 #define END -1
     6 
     7 int bignum[1000] ;
     8 void MulBigSmall(int a[],int n)
     9 {
    10     int i, cc=0;//进位标志
    11     for(i=1; i<= a[0] ; i++)
    12     {
    13         a[i] = a[i] * n+ cc;
    14         cc= a[i] / MOD;
    15         a[i] %= MOD;
    16     }
    17     while(cc)
    18     {
    19         a[i++] = cc% MOD;
    20         cc/= MOD;
    21     }
    22     a[0] = i-1;
    23 }
    24 void output(int pos)
    25 {
    26     int i, j;
    27     if(bignum[0] > pos)//字符数大于小数数 
    28     {
    29         //输出小数点前的0 
    30         for(j=0, i= bignum[0] ; j< bignum[0] - pos; j++, i--)
    31             printf("%d", bignum[i]) ;
    32         for(j=1; bignum[j] ==0; j++) bignum[j] = END;//去除尾0
    33         if(bignum[i] == END|| i==0)
    34             return;//整数
    35         printf(".") ;
    36         for(; bignum[i] != END&& i>=1; i--)
    37             printf("%d", bignum[i]) ; 
    38     }
    39     
    40     else//字符数小于或等于小数数 
    41     {
    42         printf(".") ;
    43         for(i=0; i< pos- bignum[0] ; i++)
    44             printf("0") ;
    45         for(i=1; bignum[i] ==0; i++) bignum[i] = END;//去除0 
    46         for(i= bignum[0] ; bignum[i] != END&& i>=1;i--)
    47             printf("%d", bignum[i]) ;
    48     }
    49 }
    50 int main()
    51 {
    52     int i, power, num, pos;
    53     char str[100] ;
    54     while(~scanf("%s %d", str, &power))
    55     {
    56         for(num=0, i=0, pos=5; i<6; i++)
    57         {
    58             if(str[i] =='.') pos= i;
    59             else num= num*10+ str[i] -'0';
    60         }
    61         pos= (5- pos) * power;//计算有n位小数
    62         bignum[0] = bignum[1] =1;
    63         while(power--)
    64             MulBigSmall(bignum,num);
    65         output(pos) ;
    66         printf("\n") ;
    67     }
    68     return 0;
    69 }

    属于大数处理的题目,考虑的真的有好多,自己写的时候基本上没出现错误了,可是精度发生了问题,当输入为1.0100 和1时,输出却为1.0099,还有就是输入为0.0100和1时,输出的是0.0099……,我表示不知道怎么改,后来改用字符串存,却发现很多小数点的问题,真的被玩爆了,还有值得注意的是,测数据有可能有:000000和一个整数,或者是0000.00和一个整数的组合,应该输出是0的,还有输入的第一个数有可能不只是在100以内。纠结了很久,就看了别人的AC代码,表示自己还得继续努力啊!

  • 相关阅读:
    laravel windows下安装 gulp 和 laravel-elixir
    php-新特性,生成器的创建和使用
    laravel 使用极验验证码
    laravel 发送邮件
    laravel安装 redis 并驱动 session
    理解HTTP协议(转载)
    iOS中Block的用法,举例,解析与底层原理
    iOS自定义结构体
    dyld环境变量
    iOS中的静态库与动态库,区别、制作和使用
  • 原文地址:https://www.cnblogs.com/ouyangduoduo/p/2558034.html
Copyright © 2011-2022 走看看