数字交互変換のプログラムをC++ ,JAVAの実装方法
キーボードから整数の値を入力すると、その値が漢数字で出力されるプログラム。また、結果を出力する際には、3桁ごとに「,」(コンマ)を出力すること。
JAVA:
import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.HashMap; public class Main { public static void main(String[] args) { try{ BufferedReader reader=new BufferedReader(new InputStreamReader(System.in)); System.out.println("Input:"); String line; while((line=reader.readLine())!=null){ if(line.equals("")){ System.out.println("/n空白"); }else{ String output=trans(line); System.out.println(output); System.out.println("Input:"); } } }catch(Exception e){ System.out.println("error"); System.out.println("Input:"); } } public static String trans(String in){ String temp=""; int keta=0; String oustring=""; char chararray[]=in.toCharArray(); String outst[]=new String[in.length()]; HashMap<Integer,String> map=new HashMap<Integer,String>(); int eg[] = { 0,1,2,3,4,5,6,7,8,9 }; String cn[] = { "○","一","二","三","四","五","六","七","八","九" }; for (int i = 0; i <eg.length; i++) { map.put(eg[i], cn[i]); } for(int i=0;i<chararray.length;i++){ outst[i]=map.get(Integer.parseInt(Character.toString(chararray[i]))); } for(int i=outst.length-1;i>=0;i--){ temp+=outst[i]; keta++; if(keta%3==0&&keta!=outst.length)temp+=","; } for(int n=temp.length()-1;n>=0;n--){ oustring+=temp.charAt(n); } return oustring; } }
C++:
#include "stdafx.h" #include <iostream> #include <vector> #include <sstream> #include <iomanip> #include <map> std::string formatNumber(int num) ; using namespace std; int main() { map<string, string> nummap; string eg[] = { "0","1","2","3","4","5","6","7","8","9","," }; string jp[] = { "○","一","二","三","四","五","六","七","八","九","," }; for (int i = 0; i < size(eg); i++) { nummap[eg[i]] = jp[i]; } cout << "INPUT:" << endl; for (int input; cin >> input;) { string inputs = formatNumber(input); string outputs; for (int i=0;i<size(inputs);i++) { string str(1, inputs[i]); outputs.insert(size(outputs), nummap[str]); } cout << outputs << endl; cout << "INPUT:" << endl; } return 0; } std::string formatNumber(int num) { std::vector<int> sepnum; int number = abs(num); int sgn = num >= 0 ? 1 : -1; while (number / 1000) { sepnum.push_back(number % 1000); number /= 1000; } std::stringstream ss; ss << number * sgn; for (std::vector<int>::reverse_iterator i = sepnum.rbegin(); i < sepnum.rend(); i++) { ss << "," << std::setfill('0') << std::setw(3) << *i; } return std::string(ss.str()); }
よりいい方法があるなら、教えていただければ助かります。