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代码,表示自己还得继续努力啊!

  • 相关阅读:
    Delphi的对话框窗体
    Delphi中窗体的事件
    TForm类有关属性简介
    Delphi的工具栏
    一个简单的MDI示范程序(Delphi)
    Delphi的组件选项卡(Component Palette)
    最简单的多重窗体的应用(Delphi)
    发现一个SVG做的地图网站:ChinaQuest
    计算最近点和最近线段
    寻找MapBar的地图切割方法
  • 原文地址:https://www.cnblogs.com/ouyangduoduo/p/2558034.html
Copyright © 2011-2022 走看看