close

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());
        }
    }
}
 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 awesq123 的頭像
    awesq123

    awesq123的部落格

    awesq123 發表在 痞客邦 留言(0) 人氣()