//C++实现
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char* NUMArray[10]={"零","一","二","三","四","五","六","七","八","九"};
char* NUMName[10]={"十","亿","千","百","十","万","千","百","十"," "};
//输入:530014 输出:五十三万零十四
//int型数据4个字节 最大值2147483647
int GetLength(int source)
{
int length=0;
while(source!=0)
{
source=source/10;
length++;
}
return length;
}
void GetValue(int* p,int source,int length)
{
for(int i=length-1;source!=0;i--)
{
p[i]=source%10;
source=source/10;
}
}
void main()
{
int target=0;
while(target!=-1)
{
int Length=0;
printf("输入:");
scanf("%d",&target);
Length=GetLength(target); //得到长度
int* p=(int *)malloc(sizeof(int)*Length); //分开得到数组
char** cp=(char **)malloc(sizeof(char *)*Length*2);
GetValue(p,target,Length);
int sum=0;
for(int i=0;i<Length;i++)
{
if(p[i]!=0)
{
cp[sum]=NUMArray[p[i]];
sum++;
cp[sum]=NUMName[10-Length+i];
sum++;
}
else
{
if(strcmp(cp[sum-1],"零")==0)
{
continue;
}
else
{
cp[sum]="零";
sum++;
}
}
}
for(int i=0;i<sum;i++)
{
printf("%s",cp[i]);
}
printf("\n");
free(p);
free(cp);
}
}
JAVA实现
<pre name="code" class="java">package test001;
import java.util.Scanner;
//输入530014 输出五十三万零一十四
//int 型数据最大值为 21 4748 3647 二十一亿 四千七百四十八万 三千六百四十七
//int 型数据最小值为-2147483647
public class file1 {
static String[] numArray={"零","一","二","三","四","五","六","七","八","九"};
static String[] numName={"十","亿","千","百","十","万","千","百","十",""};
public static void main(String[] args){
int a=0;
Scanner sc=new Scanner(System.in);
while(a!=-1){
System.out.println("输入:");
a=sc.nextInt();
GetString(a);
}
}
protected static String GetString(int Num){
StringBuilder sb=new StringBuilder(); //存储结果
Integer iNum=new Integer(Num); //int装箱
String source=iNum.toString(); //装箱后的String
int iLength=source.length(); //装箱后的String的长度
for(int i=0;i<iLength;i++){
if(Character.getNumericValue(source.charAt(i))!=0){
sb.append(numArray[Character.getNumericValue(source.charAt(i))]);
sb.append(numName[10-iLength+i]);
}
else{
if(sb.toString().endsWith("零")==true)
continue;
else
sb.append("零");
}
}
System.out.println(sb.toString());
return sb.toString();
}
}