把小于20亿以下的数字转换成大写输出
//
//? main.m
//? 盖世天地
//
//? Created by Ibokan on 12-12-21.
//? Copyright (c) 2012年 __MyCompanyName__. All rights reserved.
//
?
#import <Foundation/Foundation.h>
//void StrClear(char *str);
//void StrClear(char *str)
//{
//char *s=str;
//while(*s)
//{
// ? ? *s=NULL;
// ? ? s++;
//? ? }?
//}
int main (int argc, const char * argv[])
{
?
? ? @autoreleasepool {
?
?
? ? ? ? int temp=100902304;//随机的一个小于20亿的数字。
? ? ? ? char *a[19]={"零","一","二","三","四","五","六","七","八","九","十","百","千","万","十万","百万","千万","亿","十亿"};//输出时候用的。
? ? ? ? char s[30]; //求长度时候用的。
? ? ? ? sprintf(s, "%d", temp);//整型转化为字符串。
? ? ? ? int len=strlen(s);//随机数字的长度。
? ? ? ? int i=0;//从个位数字开始。
? ? ? ? char *result[100];//存储每位数字结果的字符串数组。
? ? ? ? //循环从个位数开始把结果存入result数组中。
? ? ? ? int flag=0;//判断万的时候。
? ? ? ? int flag2=0;//判断亿的时候。
? ? ? ? while (len>0) {
? ? ? ? ? ? //生成个位数字并放在结果数组中。
? ? ? ? ? ? if (i==0) {
? ? ? ? ? ? ? ? result[i]=a[temp%10];//13651281564 ? ?
? ? ? ? ? ? }
? ? ? ? ? ? //判断不是个位数的时候。需要一个拼接并放到数组中。
? ? ? ? ? ? if (i>0) {
? ? ? ? ? ? ? ? char *res=malloc(100);//字符串拼接的时候用的。
? ? ? ? ? ? ? ? char *res2=malloc(100);//字符串拼接的时候用的。
? ? ? ? ? ? ? ? strcpy(res2, "");
? ? ? ? ? ? ? ? strcpy(res, "");
?
? ? ? ? ? ? ? ? strcat(res, a[temp%10]);?
? ? ? ? ? ? ? ? strcpy(res2, res);
? ? ? ? ? ? ? ? if ((strcmp(res, "零")!=0)&&i<8) {
? ? ? ? ? ? ? ? ? ? if (flag!=1) {
? ? ? ? ? ? ? ? ? ? ? ? strcat(res2, a[9+i]); ?
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? if (flag==1) {//如果前面有万,后面判断的时候把万去掉。
? ? ? ? ? ? ? ? ? ? ? ? strcat(res2, a[5+i]); ? ?
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? if (strstr(a[9+i], "万")) {
? ? ? ? ? ? ? ? ? ? ? ? flag=1;
? ? ? ? ? ? ? ? ? ? }
?
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? else {
? ? ? ? ? ? ? ? ? ? if ((strcmp(res, "零")!=0)) {
? ? ? ? ? ? ? ? ? ? ? ? if (flag2!=1) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? strcat(res2, a[9+i]); ?
? ? ? ? ? ? ? ? ? ? ? ? }
?
? ? ? ? ? ? ? ? ? ? ? ? if (flag2==1) {//如果前面有亿,后面判断的时候把万去掉。
? ? ? ? ? ? ? ? ? ? ? ? ? ? strcat(res2, a[1+i]); ? ?
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? if (strstr(a[9+i], "亿")) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? flag2=1;
? ? ? ? ? ? ? ? ? ? ? ? }?
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? result[i]=res2;
? ? ? ? ? ? ? ? ? ? printf("%s======\n",result[i]);//此时输出的是正常的:五十,二百,四千。
?
? ? ? ? ? ? ? ? }
?
? ? ? ? ? ? ? ? i++;
? ? ? ? ? ? ? ? len--;
? ? ? ? ? ? ? ? temp=temp/10;? ?
? ? ? ? ? ? }
? ? ? ? ? ? if (i==1) {
? ? ? ? ? ? ? ? printf("%s",result[i-1]);
? ? ? ? ? ? }
? ? ? ? ? ? else{
? ? ? ? ? ? ? ? //输出结果。
? ? ? ? ? ? ? ? while(i>1) {
? ? ? ? ? ? ? ? ? ? if ((strcmp(result[i-1], "零")==0)&&(strcmp(result[i-2], "零")!=0)) {
? ? ? ? ? ? ? ? ? ? ? ? printf("%s",result[i-1]); ?
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? else if((strcmp(result[i-1], "零")!=0)) {
? ? ? ? ? ? ? ? ? ? ? ? printf("%s",result[i-1]);? ?
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? i--;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? if ((i==1)&&(strcmp(result[0], "零")!=0)) {
? ? ? ? ? ? ? ? ? ? printf("%s",result[0]);?
? ? ? ? ? ? ? ? }
?
? ? ? ? ? ? }
?
?
?
? ? ? ? }
? ? ? ? return 0;
? ? }
}
//Num = Num.replace("¥","")//替换掉可能出现的¥字符
if(isNaN(n)) { //验证输入的字符是否为数字
alert("请检查小写金额是否正确");
return;
}
var unit = "千百拾亿千百拾万千百拾元角分", str = "";
n += "00";
var p = n.indexOf('.');
if (p >= 0)
n = n.substring(0, p) + n.substr(p+1, 2);
unit = unit.substr(unit.length - n.length);
for (var i=0; i < n.length; i++){
str += '零壹贰叁肆伍陆柒捌玖'.charAt(n.charAt(i)) + unit.charAt(i);
}
var str1= str.replace(/零(千|百|拾|角)/g, "零").replace(/(零)+/g, "零").replace(/零(万|亿|元)/g, "$1").replace(/(亿)万|壹(拾)/g, "$1$2").replace(/^元零?|零分/g, "").replace(/元$/g, "元整");
while(str1.search("千拾") != -1){
str1 = str1.replace("千拾","千壹拾");
}
while(str1.search("零拾") != -1){
str1 = str1.replace("零拾","零壹拾");
}
return str1;
}