#包含?& ltstring.h & gt
const?夏爾?*?sCommonCnNumbers=?“01234567890 tsumoru陰性”;
//?讀書在壹萬以內。
夏爾?*?I2cnSub1(char?*?o,?未簽名?int?num,?int?ys?=?0)
{
如果(num?& gt?9999)?回歸?NULL
未簽名?int?q?=?num?/?1000;
num?-=?q?*?1000;
未簽名?int?b?=?num?/?100;
num?-=?b?*?100;
未簽名?int?s?=?num?/?10;
未簽名?int?g?=?num?-?s?*?10;
int?l?=?0;
if(q)?{*o++?=?q?+?'0';?*o++?=?q’;?ys?=?1;}
不然呢?如果(ys?==?1)?l?=?1;
如果(b)
{
如果(l?==?1)?{*o++?=?'0';?l?=?0;?ys?=?0;}
*o++?=?b?+?'0';?*o++?=?b’;?ys?=?1;
}
不然呢?如果(ys?==?1)?l?=?1;
如果(s)
{
如果(l?==?1)?{*o++?=?'0';?l?=?0;?ys?=?0;}
如果(s?==?1?& amp& amp?ys?==?0)?;
不然呢?*o++?=?s?+?'0';?
*o++?=?s’;?ys?=?1;
}
不然呢?如果(ys?==?1)?l?=?1;
如果(g)
{
如果(l?==?1)?{*o++?=?'0';}
*o++?=?g?+?'0';
}
*o?=?0;
回歸?o;
}
//?數字串轉換成中文數字串。
夏爾?*?I2cnSub2(char?*?o,?const?夏爾?*?我,?const?夏爾?*?kCN)
{
夏爾?*?還是?=?o;
size_t?萊恩。=?strlen(壹);
夏爾?*?buf?=?新的?char[len],?*pbl,?* pbh
memcpy(buf,我,?len);
pbl?=?buf
pbh?=?pbl?+?len
而(pbl?& lt?pbh)
{
開關(*pbl++)
{
案子?'0':?memcpy(o,?kCN,2);?o+= 2;?打破;
案子?'1':?memcpy(o,?kCN?+2,?2);?o+= 2;?打破;
案子?'2':?memcpy(o,?kCN?+4,?2);?o+= 2;?打破;
案子?'3':?memcpy(o,?kCN?+6,?2);?o+= 2;?打破;
案子?'4':?memcpy(o,?kCN?+8,?2);?o+= 2;?打破;
案子?'5':?memcpy(o,?kCN?+?10,?2);?o+= 2;?打破;
案子?'6':?memcpy(o,?kCN?+?12,?2);?o+= 2;?打破;
案子?'7':?memcpy(o,?kCN?+?14,?2);?o+= 2;?打破;
案子?'8':?memcpy(o,?kCN?+?16,?2);?o+= 2;?打破;
案子?'9':?memcpy(o,?kCN?+?18,?2);?o+= 2;?打破;
案子?s ':memcpy(o,?kCN?+?20,?2);?o+= 2;?打破;
案子?b ':memcpy(o,?kCN?+?22,?2);?o+= 2;?打破;
案子?問':memcpy(o,?kCN?+?24,?2);?o+= 2;?打破;
案子?w ':memcpy(o,?kCN?+?26,?2);?o+= 2;?打破;
案子?y ':memcpy(o,?kCN?+?28,?2);?o+= 2;?打破;
案子?'-':?memcpy(o,?kCN?+?30,?2);?o+= 2;?打破;
默認值:
;
}
}
*o?=?0;
刪除?[]?buf
回歸?或者;
};
//?將數字轉換成中文數字,結果符合中文數字的閱讀方法。
夏爾?*?I2cn(char?*?o,?__int64?num,?const?夏爾?*?kCN?=?sCommonCnNumbers)
{
夏爾?*?還是?=?o;
const?未簽名?__int64?kMaxInt32?=?4294967296ui64
const?未簽名?__int64?kYY?=?100000000000000 ui64;
const?未簽名?__int64?kWY?=?10000000000 ui64;
const?未簽名?__int64?kY=?10000000 ui 64;
const?未簽名?__int64?kW=?10000 ui 64;
如果(num?& lt?0)?{*o++?=?'-';?num?=?-num;}?
int?ys?=?0,?l?=?0;
如果(num?& gt?kYY)
{
未簽名?int?yy?=?(未簽名?int)(num?/?kYY);
num?-=?yy?*?kYY
o?=?I2cnSub1(o,?YY);
*o++?=?y’;
如果(num?& lt?kY)?*o++?=?y’;
ys?=?1;
}
不然呢?如果(ys?==?1)?l?=?1;
如果(num?& gt?kWY)
{
如果(l?==?1)?{*o++?=?'0';?l?=?0;?ys?=?0;}
未簽名?int?wy?=?(未簽名?int)(num?/?kWY);
num?-=?wy?*?kWY
o?=?I2cnSub1(o,?餵?ys);
*o++?=?w’;
如果(num?& lt?kY)?*o++?=?y’;
ys?=?1;
}
不然呢?如果(ys?==?1)?l?=?1;
如果(num?& gt?kY)
{
如果(l?==?1)?{*o++?=?'0';?l?=?0;?ys?=?0;}
未簽名?int?y?=?(未簽名?int)(num?/?kY);
num?-=?y?*?kY;
o?=?I2cnSub1(o,?y,?ys);
*o++?=?y’;
ys?=?1;
}
不然呢?如果(ys?==?1)?l?=?1;
如果(num?& gt?千瓦)
{
如果(l?==?1)?{*o++?=?'0';?l?=?0;?ys?=?0;}
未簽名?int?w?=?(未簽名?int)(num?/?kW);
num?-=?w?*?千瓦;
o?=?I2cnSub1(o,?w,?ys);
*o++?=?w’;
}
如果(數字)
{
如果(l?==?1)?{*o++?=?'0';?ys?=?0;}
o?=?I2cnSub1(o,?(未簽名?int)num,?ys);
}
*o?=?0;
回歸?I2cnSub2(或者,還是,?kCN);
}
int?主()
{
__int64?x;
夏爾?buf[128];
Printf("請輸入壹個數字:");
scanf("%I64d ",& ampx);
Printf("這個數字的中文發音是:%s\n ",I2cn(buf,?x));
回歸?0;
}