数字交互変換のプログラムを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());
}
よりいい方法があるなら、教えていただければ助かります。