1. 程式人生 > >小數的進位制轉換

小數的進位制轉換

八進位制有限小數均可以用十進位制有限小數精確地表示。比如,八進位制裡面的0.75等於十進位制裡面的0.963125 (7/8 + 5/64)。所有小數點後位數為n的八進位制小數都可以表示成小數點後位數不多於3n的十進位制小數。

你的任務是寫一個程式,把(0,1)之間的八進位制小數轉化成十進位制小數。

Input一行,包含一個八進位制小數。每個小數的形式是0.d1d2d3 ... dk,這裡di是八進位制數0...7,dk不等於0,而且已知0 < k < 15。Output輸入如下形式的一行 

0.d1d2d3...dk [8] = 0.D1D2D3...Dm [10]



這裡左邊是輸入的八進位制小數,右邊是相等的十進位制小數。輸出的小數末尾不能有0,也就是說Dm不等於0。注意空格位置。Sample Input

0.75

Sample Output

0.75 [8] = 0.953125 [10]

:輸入的數,小數後面小於15位,用char型陣列輸入,然後對每一個數進行轉換(轉換的時候用0.125的次方,這樣就算在第十五位小數的時候,也不會爆double),
 再相加之後,用printf("%.45g",t)輸出,
 printf("%.n g",a)輸出 a 的 前 n 位有效數字。自動去掉末尾的0。
#include <bits/stdc++.h>
using namespace std;
char s[20];


int main(){
	cin>>s;
	double t;
	int len = strlen(s),i;
	for(i = 2; i < len; i++){
		int temp = s[i]-'0';
		t = t + temp * pow(0.125,i-1);
	}
	
	printf("%s [8] = %.45g [10]",s,t);
	return 0;
}