Exponentiation——小数的幂

http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=28517

思路:(1)先预处理,讲输入的小数的末尾的0去掉,并记录小数点的位置,然后倒叙存放在数组里,

(2)进行连乘运算,两个循环。

重点注意运算之后数组的长度需要准确记录下来。

#include<stdio.h>
#include<string.h>
#define N 200
void add();
int reverse();
void summ();
int sum[N],b[N],n,time[N];
char a[N];
int l,len,k;
int main(){

while(scanf("%s%d",a,&n)!=EOF){

        l=0;
    memset(b,0,sizeof(b));
     memset(sum,0,sizeof(sum));
    // memset(time,0,sizeof(time));
      l=len=k=strlen(a);
   int flag=reverse();
for(int i=1;i<n;i++){
    add();
    summ();
}
int f=0;
for(int i=l-1;i>=0;i--){
    if(i==n*(len-flag)-1){
        printf(".");
    }
        if(sum[i]==0&&f==0&&i>=n*(len-flag)){
            continue;
        }
        f=1;
    /*if(f==0){
        if(sum[i]==0&&i>=n*(len-flag))
        continue;
        else{
        f==1;
        }
    }*/
    printf("%d",sum[i]);

}
printf("\n");
}
return 0;
}
int reverse(){
    int flag=0;
    int t=0;
    k=0;
    for(int i=len-1;i>=0;i--){
        if(a[i]==‘.‘){
            flag=i;t=1;
            continue;
        }
        if(a[i]==‘0‘&&t==0){
            continue;
        }
        t=1;
        b[k]= sum[k]=a[i]-‘0‘;
        k++;
    }
  /*  for(int i=0;i<len-1;i++){
    printf("%d ",sum[i]);
    }
    printf("\n%d\n",flag);*/
    len=k;
    return flag;
}
void add(){
    memset(time,0,sizeof(time));
    for(int i=0;i<l;i++){
        for(int j=0;j<len+1;j++){
            time[i+j]+=sum[i]*b[j];
        }
    }
    for(int i=0;i<l+len;i++){
        sum[i]=time[i];
    }
    /*for(int i=0;i<len+l-1;i++){
        printf("%d ",sum[i]);
    }
    printf("\n");*/
}
void summ(){
    l+=len-1;
    for(int i=0;i<l;i++){
        int s=sum[i];
        if(s>=10){
            sum[i]=s%10;
            sum[i+1]+=s/10;
            if(i==l-1) {
                l++;
                break;
            }
        }
    }
}
时间: 2024-11-05 17:40:56

Exponentiation——小数的幂的相关文章

POJ 1001 Exponentiation 求高精度幂

Exponentiation Time Limit: 500MS   Memory Limit: 10000K Total Submissions: 147507   Accepted: 36006 Description Problems involving the computation of exact values of very large magnitude and precision are common. For example, the computation of the n

POJ 1001 解题报告 高精度大整数乘法模版

题目是POJ1001 Exponentiation  虽然是小数的幂 最终还是转化为大整数的乘法 这道题要考虑的边界情况比较多 做这道题的时候,我分析了 网上的两个解题报告,发现都有错误,说明OJ对于错误的判断还不够严厉. 对边界情况的讨论其实应该是思维严密的表现,当然这并不能表明我写的一点错误都没有,只是多多分析一下还是很有好处的. #include <iostream> #include <fstream> #include <string> #include &l

C#实现任意大数的计算和简单逻辑命题的证明——BigNumber

介绍 在前言中粗略地展示了MathAssist的“计算和证明”能力,本篇开始将详细介绍其实现原理. 从计算开始说起,要实现任意大数的计算器首先得有一个类支持大数运算,于是本篇介绍BigNumber的实现.一般编程语言提供的数字类型都是基于cpu位数来实现,这样做是为了在基础类型上保证运算速度. 想当年本人刚开始学vb6(也是刚开始学程序)时, 想用这个圆周率公式来精确到小数点后上万位,可结果好像是在小数点后7.8位就无法再精确了. 稍微想下就可明白原因——所使用的float类型本身就只提供小数点

求高精度幂数

求高精度幂数 个人信息:就读于燕大本科软件工程专业 目前大三; 本人博客:google搜索"cqs_2012"即可; 个人爱好:酷爱数据结构和算法,希望将来从事算法工作为人民作出自己的贡献; 编程语言:C++ ; 编程坏境:Windows 7 专业版 x64; 编程工具:vs2008; 制图工具:office 2010 powerpoint; 硬件信息:7G-3 笔记本; 真言 去往火焰山,炼就红色眼 题目 百炼 1001 幂运算 网址 http://bailian.openjudge

POJ 1001 高精度

链接: http://poj.org/problem?id=1001 题意: 计算小数的幂,高精度 题解: 第一次用java ac,^-^ 代码: 1 import java.util.*; 2 import java.math.*; 3 4 public class Main { 5 public static void main(String args[]) { 6 Scanner cin = new Scanner(System.in); 7 while (cin.hasNext()) {

关于强度

[关于强度] 首先,如何计算一个小数次幂?如3^1.6? 解法是将小数转化为分数,先整数幂乘,再开方.对上3^1.6,则是: 3^(8/5),就是先是3的8次方 再开5次根,约等于5.80. 在镜面反射公式中,有一个光强指定Value^Gloss.Value介于0~1之间.Gloss为一个0~任意大的数(通常不超常4),在其它公式中,通常称为强度.通过Gloss,可以控制镜面光斑的大小. 上左图为Gloss为0.1的函数图.右图为Gloss为4的函数图,可以看到同样的X值,Gloss越大,那么产

杭电ACM1060——Leftmost Digit

这一题,主要是数学方面的知识,将ans = n^n进行化简. 两边取log.得到log(ans)= n * log(n): 再推出ans = 10 ^ (n * log (n)):10的整数幂,只会在ans后面加上一个0,小数的幂才会影响ans的其他有效数字. 所以求出n * log(n)的小数部分temp,然后(int)10^temp就是所要求的结果. 数学,很重要!!~· 下面的是AC的代码,用C++提交,G++会CE: #include <iostream> #include <c

ES7的新特性

ES7的新特性 ES7 特性: 1.Array.prototype.includes2.Exponentiation Operator(求幂运算) 一,Array.prototype.includes Array.prototype.includes用法容易和简单.它是一个替代indexOf,开发人员用来检查数组中是否存在值,indexOf是一种尴尬的使用,因为它返回一个元素在数组中的位置或者-1当这样的元素不能被找到的情况下.所以它返回一个数字,而不是一个布尔值.开发人员需要实施额外的检查.在

4.1Python数据类型(1)之数值类型

返回总目录 目录: 1.数据类型的表现形式: 2.数据进制的转换: 3.数据的常规操作: (一).数据类型的表现形式: (1)整数类型: # 二进制: a = 0b0110 print("二进制:", a) # 十进制: b = 134 print("十进制:", b) # 八进制: c = 0o17 print("八进制:", c) # 十六进制: d = 0x1fab print("十六进制:", d) ---------