poj 1131进制转换

//POJ 1131 Octal Fractions 任意进制之间小数的转换 //给定一个八进制的小数题目要求你把它转换为十进制小数, //转换后小数的位数是转换前八进制小数位数的3倍且不输出末尾无意义的零(即后置零). // 我采用的方法是乘10然后对8取整(现在假设将p进制的小数转换为n进制,同样采用乘n取整:), //每转换一位,都必须从最低位s[len-1]开始至小数的最高位(即小数点后的一位), //每次计算积 g=a[j]*n+k(其中k为下一位积的进位),本位进位数 k=g/p, //积在本位存入 s[j]=g%p;最后的整数k作为转换的一位存放于转换结果字符串中。 //我其实很恶心这种高精度的,,不过也列出了一种JAVA的写法。。看来JAVA要好好学点。。 #include<iostream> #include<string> #include<cstdlib> #include<algorithm> using namespace std; char s1[20],s2[50],s3[20]; int main() { int i,t,j,k,g,l,len;; while(scanf("%s",s1)!=EOF) { l=strlen(s1); strcpy(s3,s1); len=3*(l-2); t=0; s2[0]='0'; s2[1]='.'; j=2; while(t<len) { k=0; t++; for(i=l-1;i>1;i--) //从最低位开始采用乘10对8取整 { g=(s1[i]-'0')*10+k; k=g/8; s1[i]=g%8+'0'; } s2[j]=k+'0'; j++; } s2[j]='\0'; printf("%s [8] = ",s3); j--; while(s2[j]=='0') //找出最后一个不为0的数的位置 j--; for(i=0;i<=j;i++) //去掉后置0进行的输出 printf("%c",s2[i]); printf(" [10]\n"); } system("pause"); return 0; } //在上述基础上写了一个将p进制的小数转换为n进制小数的程序(2到16进制之间小数的数制转换) /* #include<iostream> #include<string> #include<cstdlib> #include<algorithm> using namespace std; string ss="0123456789ABCDEF"; string change(string s,int p,int n) { int i,t,k,g,l,pos,len; string str; l=s.size(); pos=s.find("."); len=3*(l-pos-1); //将p进制的小数转换为n进制的小数且转换后的小数位数为转换前的三倍,但不输出后置零 t=0; str+="0."; while(t<len) { k=0; t++; for(i=l-1;i>pos;i--) //乘n对p取整 { g=(s[i]-'0')*n+k; k=int(g/p); s[i]=g%p+'0'; } str+=ss.substr(k,1); } return str; } int main() { string s1,s2; int p,n,i,j; while(1) { cin>>s1; cin>>p>>n; s2=change(s1,p,n); i=s2.size()-1; while(s2[i]=='0') i--; cout<<s1<<" ["<<p<<"] = "; for(j=0;j<=i;j++) cout<<s2[j]; cout<<" ["<<n<<"]"<<endl; } system("pause"); return 0; }*/


Java

//用到的方法: //1.BigDecimal.add(BigDecimal); //2.BigDecimal.divide(BigDecimal); view plain import java.math.BigDecimal; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner cin=new Scanner(System.in); while(cin.hasNext()) { String str=cin.next(); BigDecimal Fin=new BigDecimal(0); for(int i=2;i<str.length();i++) { BigDecimal sub=new BigDecimal((int)str.charAt(i)-48); BigDecimal mom=new BigDecimal(8); Fin=Fin.add(sub.divide(mom.pow(i-1))); } System.out.println(str+" [8] = "+Fin+" [10]"); } } } */

转自http://www.cnblogs.com/Mu-Tou/archive/2011/08/10/2133875.html


转载于:https://www.cnblogs.com/moiyer/archive/2011/11/09/2316154.html

猜你喜欢

转载自blog.csdn.net/weixin_33762130/article/details/94693178
POJ