本文主要是介绍POJ Octal Fractions(JAVA水过),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目链接:CLICK HERE~
虽然java一下模拟水过,但是我看到别人的一段神奇代码,贴出和大家共享。
import java.math.*;
import java.util.*;class Main{public static void main(String args[]){Scanner cin = new Scanner(System.in);BigDecimal Eight = new BigDecimal(8);while(cin.hasNext()){String num;num = cin.nextLine();BigDecimal ans = new BigDecimal(0);BigDecimal tmp = new BigDecimal(1);for(int i = 2;i < num.length();++i){tmp = tmp.divide(Eight);ans = ans.add(new BigDecimal(num.charAt(i) - '0').multiply(tmp));}System.out.println(num + " [8] = " + ans + " [10]");}}
}
这个算法是将除法转变为乘法,对于0.d1d2d3 ... dk [8],本来是d1/8+d2/(8^2)+...+dk/(8^k),这个算法将 dn/8转变为 dn * 125,然后不断让 y 乘以 1000,起到保存小数位数的作用,最后的结果就相当于是 对dn每次乘以0.125。
#include<cstdio>#include<cstring>char c[50];int i,l;double x,y;int main(){while(scanf("%s",c)!=EOF){printf("%s [8] = ",c);l=strlen(c)-1;x=0;y=1;for(i=l;i>1;i--){x=((c[i]-'0')*y+x)*125;y*=1000;}x/=y;i=0;while(x){c[i]=int(x*=10)%10+'0';x-=c[i]-'0';i++;}c[i]='\0';printf("0.%s [10]\n",c);}}
这篇关于POJ Octal Fractions(JAVA水过)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!