hdoj 1063 Exponentiation 【大数精准次幂】
2014-07-30 18:41
218 查看
策略:将实数转化成整数, 记录下小数的位数, 最后的时候将前导0和后导0去掉输出就好了
ac by :SWS
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1063
代码:
ac by :SWS
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1063
代码:
#include<stdio.h> #include<string.h> int main() { char s[10]; int ans[250], n, i, j, d; while(scanf("%s %d", s, &n) == 2){ int len =strlen(s); //while(len>0&&s[len-1] == '0') len--; int dc = 0, temp = 0; //dc是统计小数的位数 i = 0; for(i = 0; i < len; i ++){ if(s[i] == '.'){ dc = len-i-1; continue; } else{ temp = temp*10+s[i]-'0'; } } // printf("%d %d..\n", temp, dc); memset(ans, 0, sizeof(ans)); ans[0] = 1; //初始化为1 d = 1; for(j = 1; j <= n; j ++){ int c = 0; for(i = 0; i < d; i ++){ int s = ans[i]*temp+c; ans[i] = s%10; c = s/10; } while(c){ ans[++d-1] = c%10; c/=10; } } // for(i = 0; i < 250; i ++) // printf("%d ", ans[i]); i= 0; while(i< dc*n&&ans[i] == 0) i++; //去除小数点后面的无用0 这里有个条件i的范围是在小数点后面的 j = 249; while(j >= dc*n&&ans[j] == 0) j --; //去除前导0 // printf("%d %d\n", i, j); //d = j-dc*n; for(; j >=i; j --){ if(j == (dc*n)-1) //判断是不是要输出小数点 printf("."); printf("%d", ans[j]); } printf("\n"); } return 0; }
相关文章推荐
- 【大数问题】 HDOJ 1063 Exponentiation
- 杭电OJ(HDOJ)1063题:Exponentiation(大数操作——幂运算)
- HDU 1063Exponentiation(Java的大数处理)
- hdu_1063,poj_1001_Exponentiation(大数,高精度) nyoj_155_求高精度幂
- HDOJ---1063 大数的n次方
- HDOJ 1063 大数乘法
- HDOJ1063大数相乘
- HDOJ 1063 Exponentiation
- hdu-1063 Exponentiation大数问题
- 【HDOJ】1063 Exponentiation
- HDOJ 1063 Exponentiation 简单解题报告
- HDU_1063_Exponentiation_大数
- HDOJ 1063 Exponentiation
- hdu 1063 Exponentiation 大数乘法
- HDOJ 1063 HDU 1063 Exponentiation JAVA 编写 ACM 1063 IN HDU
- hdu 1063 Exponentiation(大数)
- HDOJ 1063 Exponentiation(小数高精度)
- HDOJ 1063 Exponentiation
- HDU 1063 Exponentiation(大数乘法)
- ACM HDOJ 1063 (Exponentiation)