加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

hdu 1063 Exponentiation 大数乘法

发布时间:2020-12-14 03:29:37 所属栏目:大数据 来源:网络整理
导读:题意:输入两个数R和n,R长度为6(在一行1-6列),,n为整数(在一行7-8列)。求R^n。(其中99.999R0.0,25=n0) 要求:1)输出的整数部分为0时,不输出这个0;2)不输出前导零;3)小数部分没有后缀零;4)结果为整数是没有小数点 !!!我被坑的地方是,测

题意:输入两个数R和n,R长度为6(在一行1-6列),,n为整数(在一行7-8列)。求R^n。(其中99.999>R>0.0,25>=n>0)

要求:1)输出的整数部分为0时,不输出这个0;2)不输出前导零;3)小数部分没有后缀零;4)结果为整数是没有小数点

!!!我被坑的地方是,测试代码中存在这样的R,例如:123456,不在(0.0,99.999)范围内,好坑啊


题解:比较单纯的大整数乘法。一开始先去掉小数点,剩余的就是整数m,求的m^n。然后加小数。注意的是小数点位置,如果超过了大整数m^n长,需要补零。加上小数点后就是去掉小数的后缀零,以及在结果为整数时去掉小数点。


代码:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <map>
#include <set>
#include <queue>
using namespace std;
const int maxn=2e4+10;
char a[10],c[1000];
int b[1000],t,k;
void mul(int m)//大数乘法
{
    int i,j;
    for(i=0;i<t;i++)
        b[i]=b[i]*m;
    int temp=0,x;
    for(i=0;i<t;i++)
    {
        x=b[i]+temp;
        b[i]=x%10;
        temp=x/10;
    }
    while(temp)
    {
        b[t++]=temp%10;
        temp=temp/10;
    }
}
void pows(int m,int n)//求m^n,并输出结果
{
    int i,j,num=0;
    for(i=2;i<=n;i++)
        mul(m);
    k=k*n;
    //判断小数点的位置
    if(k>=t)
    {
        c[num++]='.';
        for(i=k-1;i>=t;i--)c[num++]='0';
        for(i=t-1;i>=0;i--)c[num++]='0'+b[i];
    }
    else
    {
        for(i=t-1;i>=0;i--)
        {
            c[num++]='0'+b[i];
            if(i==k)c[num++]='.';
        }
    }
    //删除小数部分后缀零和多余的小数点
    while(c[num-1]=='0')num--;
    if(c[num-1]=='.')num--;
    c[num]='';
    printf("%sn",c)
;}
int main()
{
    int n;
    while(scanf("%s%d",a,&n)!=EOF)
    {
        //if(n==0){printf("1n");continue;}
        int i,m=0;
        for(i=0,k=0;i<6;i++)
        {
            if(a[i]=='.')
            {
                k=5-i;
                continue;
            }
            m=m*10+(a[i]-'0');
        }
        t=0;
        i=m;
        //if(m==0){printf("0n");continue;}
        //printf("%dn",m);
        while(i!=0)
        {
            b[t++]=i%10;
            i=i/10;
        }
        pows(m,n);
    }
    return 0;
 }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读