using System;
using System.Collections.Generic;
using System.Text;
public class Utils {
static void Main(string[] args) {
Console.WriteLine("100000023:"+Convert2Chinese(100000023));
}
// 完成十位以上的数字转换汉字
public static string Convert2Chinese(int input){
string ret = null;
int input2 = Math.Abs(input);
string resource = "零一二三四五六七八九";
string unit = "个十百千万亿兆京垓秭穰沟涧正载极";
if (input > Math.Pow(10, 4 * (unit.Length - unit.IndexOf('万')))) {
throw new Exception("the input is too big,input:"+input);
}
Func<int,List<List<int>>> splitNumFunc = (val) => {
int i = 0;
int mod;
int val_ = val;
List<List<int>> splits = new List<List<int>>();
List<int> splitNums ;
do{
mod = val_ % 10;
val_ /= 10;
if(i % 4 == 0){
splitNums = new List<int>();
splitNums.Add(mod);
if(splits.Count == 0){
splits.Add(splitNums);
}else{
splits.Insert(0,splitNums);
}
}else{
splitNums = splits[0];
splitNums.Insert(0,mod);
}
i++;
}while(val_ > 0 );
return splits;
};
Func<List<List<int>>,string> hommizationFunc = (data)=>{
List<StringBuilder> builders = new List<StringBuilder>();
for (int i = 0; i < data.Count; i++) {
List<int> data2 = data[i];
StringBuilder newVal = new StringBuilder();
for (int j = 0; j < data2.Count;) {
if(data2[j] == 0){
int k = j+1;
for (; k < data2.Count && data2[k] == 0; k++);
//个位不是0,前面补一个零
newVal.Append('零');
j = k;
}else{
newVal.Append(resource[data2[j]]).Append(unit[data2.Count-1-j]);
j++;
}
}
if(newVal[newVal.Length-1] == '零' && newVal.Length > 1){
newVal.Remove(newVal.Length-1,1);
}else if(newVal[newVal.Length-1] == '个'){
newVal.Remove(newVal.Length-1,1);
}
if(i==0 && newVal.Length>1 && newVal[0]=='一' && newVal[1]=='十'){//一十 --> 十
newVal.Remove(0,1);
}
builders.Add(newVal);
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < builders.Count; i++) {//拼接
if(builders.Count == 1){//个位数
sb.Append(builders[i]);
}else {
if(i == builders.Count - 1){//万位以下的
if(builders[i][builders[i].Length -1] != '零'){//十位以上的不拼接"零"
sb.Append(builders[i]);
}
}else{//万位以上的
if(builders[i][0] != '零'){//零万零亿之类的不拼接
sb.Append(builders[i]).Append(unit[unit.IndexOf('千')+builders.Count-1-i]);
}
}
}
}
return sb.ToString();
};
List<List<int>> ret_split = splitNumFunc(input2);
ret = hommizationFunc(ret_split);
if (input < 0) ret = "-" + ret;
return ret;
}
}