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

大数乘法 748 - Exponentiation

发布时间:2020-12-14 04:06:00 所属栏目:大数据 来源:网络整理
导读:UVa OJ ? Exponentiation? Problems involving the computation of exact values of very large magnitude and precision are common. For example,the computation of the national debt is a taxing experience for many computer systems. This problem r

UVa OJ

? Exponentiation?

Problems involving the computation of exact values of very large magnitude and precision are common. For example,the computation of the national debt is a taxing experience for many computer systems.

This problem requires that you write a program to compute the exact value of?Rn?where?R?is a real number (0.0 <?R?< 99.999) and?n?is an integer such that?

$0 < n le 25$

.

Input?

The input will consist of a set of pairs of values for? R ?and? n . The? R ?value will occupy columns 1 through 6,and the? n ?value will be in columns 8 and 9.

Output?

The output will consist of one line for each line of input giving the exact value of? R n. Leading zeros and insignificant trailing zeros should be suppressed in the output.

Sample Input?

95.123 12
0.4321 20
5.1234 15
6.7592  9
98.999 10
1.0100 12

Sample Output?

548815620517731830194541.899025343415715973535967221869852721
.00000005148554641076956121994511276767154838481760200726351203835429763013462401
43992025569.928573701266488041146654993318703707511666295476720493953024
29448126.764121021618164430206909037173276672
90429072743629540498.107596019456651774561044010001
1.126825030131969720661201


这道题就是写个函数,不断进行大数乘法。用字符串来出来比较方便

还有就是我没有在每次乘完之后处理前置0。以后注意


#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<ctype.h>
#include<cmath>
int digit,t,len,mul[300];
char num[10],str[10],numb[300];
using namespace std;
int exp(int t)
{
    memset(mul,sizeof(mul));
    int i,j,lenb=strlen(numb);
    if (t==1) return 0;
    for (i=0; i<len; i++)
    {
        for (j=0; j<=lenb; j++)
        {
            if (isdigit(num[i]) && isdigit(numb[j])) mul[i+j]+=(num[i]-'0')*(numb[j]-'0');
            if (mul[i+j]>=10)
            {
                mul[i+j+1]+=mul[i+j]/10;
                mul[i+j]%=10;
            }
        }
    }
    for (i=0; i<=len+lenb+3; i++)
        numb[i]=mul[i]+48;
    numb[i]='';
    exp(t-1);
}
int main ()
{
    int i,k;
    while(scanf("%s %d",str,&t)!=EOF)
    {
        memset(mul,sizeof(mul));
        memset(num,sizeof(num));
        memset(numb,sizeof(numb));
        len=strlen(str);
        for (i=len-1,j=0; i>=0; i--)
            if (isdigit(str[i])) num[j++]=str[i];
            else k=i;
        num[j]='';
        digit=5-k;
        len--;
        strcpy(numb,num);
        exp(t);
        digit*=t;
        for (i=strlen(numb); i>=digit; i--)
            if (numb[i]!='0' && isdigit(numb[i])) break;
        for (j=i; j>=digit; j--) printf("%c",numb[j]);
        cout<<".";
        for (i=0; ; i++)
            if (numb[i]!='0') break;
        for (j=digit-1; j>=i; j--) printf("%c",numb[j]);
        cout<<endl;

    }
    return 0;
}

(编辑:李大同)

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

    推荐文章
      热点阅读