zoukankan      html  css  js  c++  java
  • hdu 1063 Exponentiation

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1063

    //注意边界,看了其他大神的代码,郁闷。。。

      1 #include<stdio.h>
      2 #include<string.h>
      3 #include<math.h>
      4 #include<stdlib.h>
      5 #include<iostream>
      6 using namespace std;
      7 #define N 200
      8 
      9 int main()
     10 {
     11     //freopen("in.txt","r",stdin);
     12     char input[10];
     13     int result[N];
     14     int i,n,r[N],t[N];
     15     while(~scanf("%s%d",input,&n))
     16     {
     17         memset(result,0,sizeof(result));
     18         memset(r,0,sizeof(r));
     19         memset(t,0,sizeof(t));
     20         t[0]=1;
     21         int j=0;
     22         for(i=5;i>=0;i--)
     23         {
     24             if(input[i]!='.')
     25             r[j++]=input[i]-'0';
     26         }
     27         for(i=0;i<=5;i++)
     28         {
     29             if(input[i]=='.')
     30             break;
     31         }
     32         int flag=5-i;//记录小数点的位置
     33         if(i==6)
     34         flag=0;
     35         if(n==0)
     36         {
     37             printf("1
    ");
     38             continue;
     39         }
     40         int h=0;
     41         for(i=0;i<N;i++)
     42         h+=r[i];
     43         if(h==0)
     44         {
     45             printf("0
    ");
     46             continue;
     47         }
     48         //printf("%d
    ",flag);
     49         int k;
     50         for(k=0;k<n;k++)
     51         {
     52             for(i=0;i<5;i++)
     53                 for(j=0;j<N;j++)
     54                     result[j+i]+=t[j]*r[i];//运算,未进位。r为每次要乘的数值
     55             for(i=0;i<N;i++)
     56             {
     57                 if(result[i]>9)//进位
     58                 {
     59                     result[i+1]+=result[i]/10;
     60                     result[i]%=10;
     61                 }
     62             }
     63             for(j=0;j<N;j++)
     64             {
     65                 t[j]=result[j];//t为下一次运算保留数值
     66             }
     67             memset(result,0,sizeof(result));//result为本次运算得到的数值
     68         }
     69         for(i=0;i<N;i++)
     70         result[i]=t[i];
     71         int high,low;
     72         for(i=N-1;i>=0;i--)
     73             if(result[i])
     74             {
     75                 high=i;
     76                 break;
     77             }
     78         for(i=0;i<N;i++)
     79             if(result[i])
     80             {
     81                 low=i;
     82                 break;
     83             }
     84 //        printf("%d
    ",high);
     85 //        printf("%d
    ",low);
     86 //        for(i=N-1;i>=0;i--)
     87 //        printf("%d",result[i]);
     88 //        printf("
    ");
     89           flag=flag*n-1;
     90 //        printf("%d
    ",flag);
     91 
     92         if(flag>=high)
     93         {
     94             printf(".");
     95             for(i=flag;i>=low;i--)
     96             printf("%d",result[i]);
     97         }
     98         else if(flag<low)
     99         {
    100             for(i=high;i>flag;i--)
    101             printf("%d",result[i]);
    102         }
    103         else
    104         {
    105             for(i=high;i>=low;i--)
    106             {
    107                 if(i==flag)
    108                 printf(".");
    109                 printf("%d",result[i]);
    110             }
    111         }
    112         printf("
    ");
    113     }
    114     return 0;
    115 }
  • 相关阅读:
    常见排序算法的实现
    Never-build package 'XXXX' requires always-build package 'EhLib70'
    自制的七个C,总结的太好了
    那些有影响力的语言
    数海笔记(0)-程序员为什么要学数学
    linux 多线程编程笔记
    双指数边缘平滑滤波器用于磨皮算法的尝试。
    对于树的序列化,用了stream,很好
    很聪明的解法
    按窗口获得最大数 和 中位数
  • 原文地址:https://www.cnblogs.com/xuesen1995/p/4339986.html
Copyright © 2011-2022 走看看