zoukankan      html  css  js  c++  java
  • UVA 748 Exponentiation

    取幂运算:本题考查了浮点数高精度取幂运算,题目很简单,我的思路是浮点数作积运算小数点的位数很重要,而积的小数点的位数等于因子的小数点的位数之和,知道这一点就确定了小数点的位置了,之后再进行前后去零处理(题目要求),即可。

    代码如下(有待优化):

    #include<stdio.h>
    #include<string.h>
    #define MAXN 20000
    char a[7];
    int n, num;
    int A_1[MAXN], A[6], s[MAXN];
    void solve()
    {
    int p = 5;
    memset(A_1,0,sizeof(A_1));
    for(int i = 0; i < 6; i ++)
    {
    if(a[i] == '.')
    {
    num = 5 - i;
    num *= n;
    }
    if(a[i] >='0' && a[i] <= '9')
    A[--p] = a[i] - '0';
    }
    A[5] = 0;
    for(int i = 0; i < 5; i ++)
    A_1[i] = A[i];
    for(int u = 1; u < n; u ++)
    {
    memset(s,0,sizeof(s));
    for(int i = 0; i < 6; i ++)
    {
    int c = 0;
    for(int j = 0; j < MAXN; j ++)
    {
    s[i+j] += A_1[j] * A[i] + c;
    c = s[i+j] / 10;
    s[i+j] %= 10;
    }
    }
    for(int i = 0; i < MAXN; i ++)
    A_1[i] = s[i];
    }
    int i, j;
    for(i = MAXN; i >= 0; i --)
    if(s[i]||i == num) break;
    for(j = 0; j <= i; j ++)
    if(s[j]) break;
    for(int p = i; p >= j; p --)
    {
    if(num == p&&p == i)
    {
    if(s[p]) printf("%d.",s[p]);
    else
    printf("."); continue;
    }
    printf("%d",s[p]);
    if(num == p&&p != i) printf(".");
    }
    printf("\n");
    }
    void input()
    {
    while(scanf("%s%d",a,&n) == 2)
    {
    solve();
    }
    }
    int main()
    {
    input();
    return 0;
    }



  • 相关阅读:
    2017NOIP游记 (格式有点炸)
    Qtree3
    [P2769] 猴子上树
    [Usaco2005 Dec]Cleaning Shifts 清理牛棚
    [NOIP2014] 解方程
    [ZJOI2012] 灾难
    [洛谷P3941] 入阵曲
    [SCOI2009] 最长距离
    [JLOI2011] 飞行路线
    虚拟化数电底层
  • 原文地址:https://www.cnblogs.com/yuzhaoxin/p/2374612.html
Copyright © 2011-2022 走看看