こんにちは、最後のwhile文のが無限ループになっているいがに訂正すべき点がございます。
1.
のところですが厳密にいうと
です。
for(j=0;j<sinsu.length()-1;j++){
b+=sinsu.charAt(j)*9;
}
b+=sinsu.charAt(j);
ここは、10進数に変換するところだと思いますが、すべての位に9を掛けその合計を出しています。
9進数は1の位,9の位,81の位...となりますのですべて9を掛けると10進数に変換することができません。
(まだ訂正前の状態で質問されたのならすみません)
3.
while(b >= 3){
c = b % 3;
d = d + c;
}
最初の宣言でcはint型,dはString型で演算をしていますが,これだと表示結果が反転します。
例えば87を入力すると3進数では2221となりますが,表示結果が逆の1222となります。
私はこの部分をList(配列)でやりました。
以下,私が書いたソースコード(例)です。(変数名が微妙ですみません.)
少し書き換えるとm進数からn進数に変換するプログラムにすることができます。
Java
1
2import java.util.Scanner;
3import java.util.ArrayList;
4
5public class Main{
6 public static void main(String[] args){
7
8 Scanner sc = new Scanner(System.in);
9 String line = sc.nextLine();
10 int judge = 1; //9進数でなければ0に変わる
11 for(int i = 0; i < line.length(); i++){
12 char c = line.charAt(i);
13 if(c == '9'){
14 System.out.println("9進数ではありません");
15 judge = 0;
16 break;
17 }
18 }
19 if(judge == 1){
20 int number10,answer;
21 number10 = m_to_ten(9,line);
22 ten_to_n(number10,3);
23
24 }
25 }
26
27 public static int m_to_ten(int m,String line){ //m進数を10進数に変換
28
29 int []number_m = new int[line.length()];
30 for(int i = 0; i < line.length(); i++){
31 number_m[i] = Integer.parseInt(line.substring(i,i + 1));
32 }
33 int number10 = 0;
34
35 for(int i = 0; i < line.length(); i++){
36 number10 += number_m[i] * ruijou(m,line.length() - i - 1);
37 }
38
39 return number10;
40 }
41
42 public static void ten_to_n(int number10,int n){ //10進数をn進数に変換
43 int answer = 0;
44 ArrayList<Integer> array = new ArrayList<>();
45 while(number10 > 0){
46 answer = number10 % n;
47 array.add(answer);
48 number10 /= n;
49 }
50 for(int i = array.size() - 1; i >= 0; i--){
51 System.out.print(array.get(i));
52 }
53 }
54
55
56 public static int ruijou(int m, int n){ //mのn乗
57 int answer = 1;
58
59 for(int i = 0; i < n; i++){
60 answer *= m;
61 }
62 return answer;
63 }
64}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/04/10 09:44
退会済みユーザー
2018/04/10 10:01
退会済みユーザー
2018/04/10 10:15