10进制转16进制(java)

我知道有简便方法但我还是想知道我这个代码哪里有错?(pta显示最终答案有错)
import java.util.Scanner;
public class Main {
public static void main(String[] args) {

System.out.println("请输入一个整数:");
  Scanner input=new Scanner(System.in);
  int a=input.nextInt();
  int b=a;
  int n=a;
  int k=0;
  char[] c=new char[]{'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
  int[] d=new int[a];
  int i=0;
  int flag=0;
 while(b!=0)
 {
    b=b/16;
    d[i]=n%16;
    n=b;
    i++;
    flag++;
 }
 for(i=flag-1;i>=0;i--)
 {
     k=d[i];
 System.out.print(c[k]);
 }
 }
}

你看看题目输出示例是不是A到F字符要大写的
你题目的解答代码如下:

import java.util.Scanner;
public class Main {
public static void main(String[] args) {

//System.out.println("请输入一个整数:"); //这一行去掉,不要输出题目没要求的提示
  Scanner input=new Scanner(System.in);
  int a=input.nextInt();
  int b=a;
  int n=a;
  int k=0;
  char[] c=new char[]{'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
  int[] d=new int[100];//d数组长度和a没有关系
  int i=0;
  int flag=0;
    do{     // 改成do while 考虑到输入是0的情况,要让循环至少运行一次
        b=b/16;
        d[i]=n%16;
        n=b;
        i++;
        flag++;
    } while(b!=0);
    for(i=flag-1;i>=0;i--)
    {
        k=d[i];
    System.out.print(c[k]);
    }
 }
}

如有帮助,望采纳!谢谢!

题目要求是啥,一个都没通过吗?