当前位置:编程学习 > JAVA >>

紧急求助,是在是脑子快炸了,进制转换的问题

今天老师要求写一个十进制转其他进制的小程序。

就是输入一个十进制数,输出它的2-16进制数。

自己写了半天,二进制就不说了,三进制开始,输出就全是0了,实在不会写了。。。。来找大神求助、、、


在线等!!!!,谢谢大家帮忙!!! 进制转换 二进制 八进制 十六进制 --------------------编程问答-------------------- 记得以前做ACM的时候做过
题目是: 输入基数b(2≤b≤16)和正整数n(十进制),任务:输出n的b进制。
代码给楼主,你自己改下输出就可以了

#include "stdio.h"
#include "string.h"
int main() {
//freopen("1129.in", "r", stdin);


int b, i=0, j, temp;
char a[17] = "0123456789abcdef";
char sum[100], flag;
long n;

scanf("%d%ld", &b, &n);

if (b<2 || b>16){
printf("Error Input!");
return 0;
}
if(n==0){
sum[0]='0';
i++;
}

while (n != 0){
temp = (n % b);
sum[i++] = a[temp];
n /=  b;
}
sum[i] = 0;
for(j=0; j < i/2; j++){
flag = sum[j];
sum[j] = sum[i-j-1];
sum[i-j-1] = flag;
}
puts(sum);

return 0;
}
--------------------编程问答-------------------- 可是我的是java,算法什么的没有变化吧?!
--------------------编程问答-------------------- 还是不会改成java的程序。。。原谅我的编程水平吧 --------------------编程问答--------------------
import java.util.*;
public class Tre {
public static void main(String args[]){
int b = 2;
int i=0;
int j;
int temp;
char a[]= new char[17];
a[17] = ("0123456789abcdef");//这句编译的时候报错
char sum[] = new char[100];
char flag;
Scanner sc=new Scanner(System.in);
int n = sc.nextInt();

if(n==0){
sum[0]='0';
i++;
}

while (n != 0){
temp = (n % b);
sum[i++] =(a[temp]);
n /=  b;
}
sum[i] = 0;
for(j=0; j < i/2; j++){
flag = sum[j];
sum[j] = sum[i-j-1];
sum[i-j-1] = flag;
}
System.out.println(sum);
sc.close();
}
}
--------------------编程问答-------------------- 做了一个只能转换整数的。

package cn.dzr.csdn;


public class jinzhi {
    public static void main(String[] args)
    {
        String str = test(18,16);
        System.out.println(str);
    }
    
    public static String test(int num,int p)
    {
        //将10进制的数num转为 p进制
        //
        //
        //   1000/8  = 125   余   0
        //    125/8  =  15   余   5
        //      15/8  =  1   余   7
        //       1/8  =  0   余   1
        //    1000  的  10 进制  转 8进制  为  1750
        
        int i;
        int j;
        StringBuffer sb = new StringBuffer("");
        
        do{
            i=num/p;
            j = num%p;
            if(j<10)
            sb.insert(0, j);
            if(j==10)
                sb.insert(0, 'A');
            if(j==11)
                sb.insert(0, 'B');
            if(j==12)
                sb.insert(0, 'C');
            if(j==13)
                sb.insert(0, 'D');
            if(j==14)
                sb.insert(0, 'E');
            if(j==15)
                sb.insert(0, 'F');
     
            num = i;
        }while(i!=0);
        
        return sb.toString();
        
    }
}
--------------------编程问答--------------------

public static void main(String[] args) {
int i16 = Integer.parseInt("12", 16);//转为16进制的
int i8 = Integer.parseInt("12", 8);
int i4 = Integer.parseInt("12", 4);
int i2 = Integer.parseInt("12", 2);
}
--------------------编程问答--------------------
引用 6 楼 AA5279AA 的回复:

public static void main(String[] args) {
int i16 = Integer.parseInt("12", 16);//转为16进制的
int i8 = Integer.parseInt("12", 8);
int i4 = Integer.parseInt("12", 4);
int i2 = Integer.parseInt("12", 2);
}

楼上很邪恶  --------------------编程问答--------------------
引用 6 楼 AA5279AA 的回复:

public static void main(String[] args) {
int i16 = Integer.parseInt("12", 16);//转为16进制的
int i8 = Integer.parseInt("12", 8);
int i4 = Integer.parseInt("12", 4);
int i2 = Integer.parseInt("12", 2);
}

可是是要转成2-16进制,即2,3,4,5....14,15,16进制 --------------------编程问答-------------------- 除进制数值取余数就是了 --------------------编程问答--------------------


String str = "";
while (num > 0) {
int mod = (num % radix);

if (mod >= 10) {
str = (char) ('A' + (mod - 10)) + str;
} else {
str = mod + str;
}

num /= radix;
}
return str;


只能处理正数,负数需要根据不同长度补符号位 --------------------编程问答-------------------- java.util.Integer
里面有  public static String toString(int i, int radix) {}
直接参考吧 --------------------编程问答-------------------- 楼主是想要自己写算法还是要直接用JDK Integer现成的api Integer.toString(int num,int radix)这就能满足你要自己写算法的话你可以直接参考jdk,Integer.toString(int num,int radix)的源码来写 --------------------编程问答--------------------
public class StringTest {
public static void main(String[] args) {
int a=456;
System.out.println(jingzhi(a,4));
}
public static String jingzhi(int deci,int num){
if(deci/num!=0)
return jingzhi(deci/num,num)+deci%num;
else
return deci%num+"";
}

}

无聊写了2-10进制的 --------------------编程问答--------------------

Integer a = 16;//待转的数
for (int i = 2; i <= 16; i++) {
String s = Integer.toString(a, i);
System.out.println(i+"进制="+s);
}

结果为:

2进制=10000
3进制=121
4进制=100
5进制=31
6进制=24
7进制=22
8进制=20
9进制=17
10进制=16
11进制=15
12进制=14
13进制=13
14进制=12
15进制=11
16进制=10

--------------------编程问答--------------------
引用 9 楼 x19881216 的回复:
除进制数值取余数就是了

楼主,就是这个,万能的。
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,