2013年10月17日木曜日

開発環境

『初めてのプログラミング 第2版』(Chris Pine 著、長尾 高弘 訳、オライリー・ジャパン、2010年、ISBN978-4-87311-469-9)の10章(章全部で復習), 10.5(練習問題続き)、拡張 english_numberをDartで解いてみる。

その他参考書籍

拡張 english number

コード

sample.dart

import 'dart:math' as math;

String englishNumber(int number){
  if(number < 0){
    return '自然数(0から)を入力してください。';
  }
  if(number == 0){
    return 'zero';
  }
  var num_string = '';
  var ones_place = ["one", "two", "three", "four", "five",
                    "six", "seven", "eight", "nine"];
  var tens_place = ["ten", "twenty", "thirty", "forty", "fifty", 
                    "sixty", "seventy", "eighty", "ninety"];
  var teenagers = ["eleven", "twelve", "thirteen", "fourteen", "fifteen", 
                   "sixteen", "seventeen", "eighteen", "nineteen"];
  var others = [[2, 'hundred'],
                [3, 'thousand'],
                [6, 'million'],
                [9, 'billion'],
                [12, 'trillion'],
                [15, 'quandrillion'],
                [18, 'quintillion'],
                [21, 'sextillion'],
                [24, 'septillion']];
  var left = number;
  while(others.length > 0){
    var other = others.removeLast();
    var n = other[0];
    var name = other[1];
    var d = math.pow(10, n);
    var write = left ~/ d;
    left -= write * d;
    if (write > 0){
      var pre = englishNumber(write);
      num_string = num_string + pre + ' ' + name;
      if(left > 0){
        num_string += ' ';
      }
    }
  }
  var write = left ~/ 10;
  left -= write * 10;
  if(write > 0){
    if(write == 1 && left > 0){
      num_string += teenagers[left - 1];
      left = 0;
    } else {
      num_string += tens_place[write - 1];
    }
    if (left > 0){
      num_string += ' ';
    }
  }
  write = left;
  left = 0;
  if(write > 0){
    num_string += ones_place[write - 1];
  }
  return num_string;
}
void main(){
  var n = 1234567890123456789012345;
  print(n);
  print(englishNumber(n));
}

入出力結果

1234567890123456789012345
one septillion two hundred thirty four sextillion five hundred sixty seven quintillion eight hundred ninety quandrillion one hundred twenty three trillion four hundred fifty six billion seven hundred eighty nine million twelve thousand three hundred forty five

0 コメント:

コメントを投稿