recursion 的寫法非常淺顯易懂。
下面這個寫法沒辦法處理>long long int 範圍的數字
----------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#define kuti 10000000
#define lakh 100000
#define hajar 1000
#define shata 100
void Recursive_bangla(long long int);
int main()
{
long long int num, _case = 1;
while(scanf("%lld", &num) == 1)
{
printf("%4d.", _case++);
if(num)
Recursive_bangla(num);
else
printf(" 0");
printf("\n");
}
return 0;
}
void Recursive_bangla(long long int num)
{
if(num >= kuti)
{
Recursive_bangla(num / kuti);
printf(" kuti");
num %= kuti;
}
if(num >= lakh)
{
Recursive_bangla(num / lakh);
printf(" lakh");
num %= lakh;
}
if(num >= hajar)
{
Recursive_bangla(num / hajar);
printf(" hajar");
num %= hajar;
}
if(num >= shata)
{
Recursive_bangla(num / shata);
printf(" shata");
num %= shata;
}
if(num)
printf(" %d", num);
return;
}
-2015-05-27-------------------------------------------------
package test;
import java.math.BigDecimal;
import java.util.*;
public class main {
static final BigDecimal BD_ZERO = new BigDecimal("0");
static final BigDecimal BD_SHATA = new BigDecimal("100");
static final BigDecimal BD_HAJAR = new BigDecimal("1000");
static final BigDecimal BD_LAKH = new BigDecimal("100000");
static final BigDecimal BD_KUTI = new BigDecimal("10000000");
//use 'kuti' (10000000), 'lakh' (100000), 'hajar' (1000), 'shata' (100)
public static void main(String[] args) {
try {
Scanner in = new Scanner(System.in);
int caseNum = 1;
while (in.hasNextLine()) {
String totalString = in.nextLine();
String[] strarr = totalString.split(" "); // 處理麻煩的輸入
for (String string : strarr) {
// 空格被split掉後會變成空字串回傳
if (string.length() == 0) {
continue;
}
BigDecimal bd = new BigDecimal(string);
System.out.printf("%4d.", caseNum++);
// 特殊情形
if ((string.charAt(0) == '0') && (string.length() == 1)) {
System.out.println(" 0");
continue;
}
doBangla(bd);
System.out.println("");
}
}
in.close();
} catch (Exception e) {
System.out.println("Input error!");
}
}
private static void doBangla(BigDecimal bd) {
// -1 -> bd < BD_KUTI, 0 -> bd == BD_KUTI, 1 -> bd > BD_KUTI
// 遞迴越底層越先輸出,所以用除的取高位數讓高位數在底層先輸出
if (bd.compareTo(BD_KUTI) != -1) {
// != -1 -> (== 0 || == 1) -> bd >= BD_KUTI
// bd = (bd - bd % BD_KUTI) / BD_KUTI -> 整除
doBangla(bd.subtract(bd.remainder(BD_KUTI)).divide(BD_KUTI));
bd = bd.remainder(BD_KUTI);
System.out.print(" kuti");
}
if (bd.compareTo(BD_LAKH) != -1) {
doBangla(bd.subtract(bd.remainder(BD_LAKH)).divide(BD_LAKH));
bd = bd.remainder(BD_LAKH);
System.out.print(" lakh");
}
if (bd.compareTo(BD_HAJAR) != -1) {
doBangla(bd.subtract(bd.remainder(BD_HAJAR)).divide(BD_HAJAR));
bd = bd.remainder(BD_HAJAR);
System.out.print(" hajar");
}
if (bd.compareTo(BD_SHATA) != -1) {
doBangla(bd.subtract(bd.remainder(BD_SHATA)).divide(BD_SHATA));
bd = bd.remainder(BD_SHATA);
System.out.print(" shata");
}
if (bd.compareTo(BD_ZERO) != 0) {
System.out.print(" " + bd.toString());
}
}
}