题目
问题描述:输入一个十进制数N,将它转换成R进制数输出。
输入说明:输入数据包含测试实例个数M,每个测试实例包含两个数N和R(2<=R<=9)。
输出说明:为每个测试实例输出转换后的数,每个输出占一行。
输入样例:
3
7 3
-0.5 2
10.5 8
输出样哩:
21
-0.1
12.4
代码
package demo8;
import java.util.Scanner;
public class jiszu {
public static void fun1(int n,int r)//整数部分
{
int[] c = new int[100];
int len=0;
if(n==0){
System.out.print(n);
}
else{
while(n!=0){
c[len++]= (n%r);//求余数
n=n/r;
}
for(;len>0;len--)
{
System.out.print(c[len-1]);//倒序输出
}
}
}
public static void fun2(double n,int r){//小数部分
int i, len = 0;
int[] a = new int[100];
while (n!=0) {
int temp = (int)(n * r);//只保留整数部分
a[len++] = temp;
n = r * n - temp;//得到新的小数部分继续循环
}
if(len!=0)
{
System.out.print(".");
for (i = 0; i < len; i++) {
System.out.print(a[i]);
}
}
}
public static void main(String[] args) {
int r, m;//r表示要转成几进制,m表示要测试实例个数
double n;//十进制数
System.out.println("请输入数据包含测试实例个数:");
Scanner scanner = new Scanner(System.in);
m = scanner.nextInt();
while (m!=0) {
System.out.println("");
System.out.println("请输入一个十进制数及要转成几进制:");
n = scanner.nextDouble();
r = scanner.nextInt();
int t = (int)n;//用t表示输入十进制数的整数部分
double x = n - t;//小数部分
if(n>0){
fun1(t, r);
fun2(x, r);}
else{
System.out.print("-");
fun1(-t, r);
fun2(-x, r);
}
m--;
}
}
}