Octal Fractions java秒 C++
题目抽象: 将八进制小数转换成十进制小树。小数的为数很大。
可以用java 中的BigDeciaml 秒掉。 time:297ms
1 import java.math.*; 2 import java.util.*; 3 import java.io.*; 4 import java.text.*; 5 6 public class Main 7 { 8 static int MS=3005; 9 public static void main(String[] args) 10 { 11 Scanner cin=new Scanner(new BufferedInputStream(System.in)); 12 while(cin.hasNext()) 13 { 14 String str=cin.next(); 15 BigDecimal sum=new BigDecimal(0); 16 BigDecimal tmp=new BigDecimal(1); 17 BigDecimal eight=new BigDecimal(8); 18 for(int i=2;i<str.length();i++) 19 { 20 tmp=tmp.divide(eight); 21 sum=sum.add(tmp.multiply(new BigDecimal(str.charAt(i)-'0') )); 22 } 23 System.out.println(str + " [8] = " + sum.toString() + " [10]"); 24 } 25 cin.close(); 26 } 27 }
C++ time : 0ms
1 #include <iostream> 2 #include <string.h> 3 #include <cstdio> 4 using namespace std; 5 const int MS=1001; 6 7 int main() 8 { 9 char str[MS],ans[3*MS]; 10 int i,j,index,num; 11 while(scanf("%s",str)!=EOF) 12 { 13 int len=strlen(str); 14 index=0; 15 memset(ans,0,sizeof(ans)); 16 for(i=len-1;i>1;i--) 17 { 18 num=str[i]-'0'; 19 for(j=0;j<index||num;j++) 20 { 21 num=num*10+(j<index?ans[j]-'0':0); 22 ans[j]=num/8+'0'; 23 num=num%8; 24 } 25 index=j; 26 } 27 printf("%s [8] = 0.%s [10]\n",str,ans); 28 } 29 return 0; 30 }