【百炼oj】1001:Exponentiation

2023-10-24 18:58
文章标签 oj 1001 exponentiation 百炼

本文主要是介绍【百炼oj】1001: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 Rnwhere R is a real number ( 0.0 < R < 99.999 ) and n is an integer such that 0 < n <= 25.

输入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.输出The output will consist of one line for each line of input giving the exact value of R^n. Leading zeros should be suppressed in the output. Insignificant trailing zeros must not be printed. Don't print the decimal point if the result is an integer.样例输入
95.123 12
0.4321 20
5.1234 15
6.7592  9
98.999 10
1.0100 12
样例输出
548815620517731830194541.899025343415715973535967221869852721
.00000005148554641076956121994511276767154838481760200726351203835429763013462401
43992025569.928573701266488041146654993318703707511666295476720493953024
29448126.764121021618164430206909037173276672
90429072743629540498.107596019456651774561044010001
1.126825030131969720661201


#include<stdio.h>
#include<string.h>
#include<math.h>
#define p 7
#define len 120
int main(){int mult(int*a,int*b);int n,i,j,k,location,flag;int an[len],bn[len];char sz[p];while(scanf("%s %d",sz,&n)==2){memset(an,0,sizeof(an));memset(bn,0,sizeof(bn));an[0]=1;location=-1;for(i=0;i<p-1;i++){if(sz[i]=='.'){location=i;//memory the location of the dotlocation=n*(p-2-i);//get the new locationfor(j=i;j<p-1;j++)sz[j]=sz[j+1];//remove the dotsz[p-1]='\0';}}for(i=0;i<strlen(sz);i++)bn[i]=sz[strlen(sz)-1-i]-'0';for(i=0;i<n;i++)mult(an,bn);if(location==-1){flag=0;for(i=len-1;i>=0;i--){if(flag)printf("%d",an[i]);else if(an[i]){printf("%d",an[i]);flag=1;}}if(!flag)printf("0");printf("\n");}//整数情况else//小数{for(i=0;;i++){k=i;if(an[i]!=0)break;}for(i=len-1;i>=k;i--){if(an[i])break;}if(i<location){printf(".");for(i=location-1;i>=k;i--)printf("%d",an[i]);printf("\n");}else{if(k<location){flag=0;for(i=len-1;i>=k;i--){if(flag){printf("%d",an[i]);if(i==location&&i!=k)printf(".");}else if(an[i]){printf("%d",an[i]);if(i==location&&i!=k)printf(".");flag=1;}}printf("\n");}else{flag=0;for(i=len-1;i>=location;i--){if(flag){printf("%d",an[i]);}else if(an[i]){printf("%d",an[i]);flag=1;}}if(!flag)printf("0");printf("\n");}}}}
}
int mult(int*a,int*b){int i,j,k,l;int c[len];memset(c,0,sizeof(c));for(i=0;i<len;i++){k=0;for(j=0;j<len-i;j++){l=c[i+j]+a[j]*b[i]+k;c[i+j]=l%10;k=l/10;}}for(i=0;i<len;i++)a[i]=c[i];
}

这篇关于【百炼oj】1001:Exponentiation的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/277126

相关文章

哈理工OJ 2179(深搜)

组合 Time Limit: 1000 MSMemory Limit: 32768 K Total Submit: 7(5 users)Total Accepted: 6(5 users)Rating: Special Judge: No Description 给出一个正整数N,从集合{1,2,3..N} 中找出所有大小为k的子集, 并按照字典序从小到大输出。 Input 第一行是一个整

百度之星 2015 复赛 1001 (数长方形)

数长方形    Accepts: 595    Submissions: 1225  Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem Description 小度熊喜欢玩木棒。一天他在玩木棒的时候,发现一些木棒会形成长方形

每日OJ_牛客_求和(递归深搜)

目录 牛客_求和(递归深搜) 解析代码 牛客_求和(递归深搜) 求和_好未来笔试题_牛客网 解析代码         递归中每次累加一个新的数,如果累加和大于等于目标,结束递归。此时如果累加和正好等于目标,则打印组合。向上回退搜索其它组合。此题本身就是一个搜索的过程,找到所有的组合。 #include <iostream>#include <cmath>#in

python 实现matrix exponentiation矩阵求幂算法

matrix exponentiation矩阵求幂算法介绍 矩阵求幂算法(Matrix Exponentiation)是一种通过利用矩阵乘法的结合律来高效地计算矩阵的幂的算法。这种方法特别适用于在算法竞赛和计算机科学领域中解决需要快速计算矩阵幂的问题,如求解线性递推关系、图论中的路径计数等。 基本思想 矩阵求幂算法的基本思想类似于整数快速幂算法(快速幂算法),通过递归或迭代的方式将矩阵幂的计

OJ-0905

题目 示例1: 输入:10 10 56 34 99 1 87 8 99 3 255 6 99 5 255 4 99 7 255 2 99 9 255 213 4输出:99 示例2: 输入:10 10 255 34 0 1 255 8 0 3 255 6 0 5 255 4 0 7 255 2 0 9 255 213 5输出:255 import java.util.

每日OJ_牛客_Emacs计算器(逆波兰表达式)

目录 牛客_Emacs计算器(逆波兰表达式) 解析代码 牛客_Emacs计算器(逆波兰表达式) Emacs计算器__牛客网 解析代码 逆波兰表达式(后缀表达式)求值,需要借助栈,思路: 循环输入,获取逆波兰表达式,然后进行以下补助,直到测试完所有的测试用例: 遇到数字字符串,将该数字字符串转化为数字然后入栈。遇到操作符时,从栈顶取两个数字,然后进行该运算符所对应运算

西北工业大学oj题-兔子生崽

题目描述: 兔子生崽问题。假设一对小兔的成熟期是一个月,即一个月可长成成兔,每对成兔每个月可以生一对小兔,一对新生的小兔从第二个月起就开始生兔子,试问从一对兔子开始繁殖,一年以后可有多少对兔子? 这道题目一眼看过去就是典型的递归问题,代码如下 public class RabbitReproduction {public static void main(String[] args) {in

★ 算法OJ题 ★ 力扣209 - 长度最小的子数组

Ciallo~(∠・ω< )⌒☆ ~ 今天,简将和大家一起做一道滑动窗口算法题--长度最小的子数组~ 目录 一  题目 二  算法解析 解法⼀:暴力求解 解法二:滑动窗口 三  编写算法 一  题目 209. 长度最小的子数组 - 力扣(LeetCode) 二  算法解析 解法⼀:暴力求解 算法思路: 从前往后枚举数组中的任意⼀个元素,把它当成起始位置

OJ-0903

题目 示例1 输入:30 12 25 8 19输出:15 示例2 输入:10 12 25 8 19 8 6 4 17 19 20 30输出:-1 题解 import java.util.ArrayList;import java.util.List;import java.util.Scanner;public class Main {public static

【负载均衡式在线OJ】Compile_server 模块

文章目录 程序源码compile_server整体思路编译(compile.hpp)运行模块编译运行模块编译运行服务 程序源码 https://gitee.com/not-a-stupid-child/online-judge compile_server 整体思路 这个服务要对oj_server 发送过来的代码进行编译和运行,最后把结果返回给oj_server。 所以我