UVA748 Exponentiation 题解
UVA748 Exponentiation题目描述Link: https://uva.onlinejudge.org/index.php?optioncom_onlinejudgeItemid8category9pageshow_problemproblem689PDF输入格式输出格式输入输出样例 #1输入 #195.123 12 0.4321 20 5.1234 15 6.7592 9 98.999 10 1.0100 12输出 #1548815620517731830194541.899025343415715973535967221869852721 .00000005148554641076956121994511276767154838481760200726351203835429763013462401 43992025569.928573701266488041146654993318703707511666295476720493953024 29448126.764121021618164430206909037173276672 90429072743629540498.107596019456651774561044010001 1.126825030131969720661201Solution1. 题目描述输入若干组小数a aa和整数b bb求出a b a^bab的精确值。2. 分析可以参考 P1517。两道题除了数据范围不同外输入输出和格式等完全相同。作为一道经典的高精度问题这里推荐使用 Python 的 Decimal 模块。使用该模块求解此题需要注意的要点包括构造 Decimal 对象时必须要将小数按照字符串的格式传入构造函数否则会引入浮点误差。需要在计算前将 Decimal 的工作精度设置为较大的值参考代码如下表示让 Decimal 执行计算时保持 10000 位精度importdecimalfromdecimalimportDecimal decimal.getcontext().prec10000如果 decimal 计算出的值很小答案可能会默认用科学计数法输出而这会导致 WA。当出现此种情况时需要设计合适的转换代码以将其转化为常规格式判断方法也很简单判断计算的答案用str()转化为字符串的结果包含了字母 E 或者 e。若结果小于1 11则小数点前的0 00不能输出例如0.0325必须输出为.0325同时答案为整数时不能输出小数点。3. 代码实现importdecimalfromdecimalimportDecimal decimal.getcontext().prec10000while(1):try:x,yinput().split()yint(y)tDecimal(x)resultDecimal(1)foriinrange(y):result*tif(E-instr(result)):va_liststr(result).split(E-)va_list[1]int(va_list[1])print(.,end)foriinrange(va_list[1]-1):print(0,end)foriinrange(len(va_list[0])):if(va_list[0][i].isdigit()):print(va_list[0][i],end)print()else:jlen(str(result))-1while(str(result)[j]0):j-1if(str(result)[j].):j-1if(tDecimal(1)):print(str(result)[0:j1])else:print(str(result)[1:j1])exceptException:break