如何将12345这样的数字转换成相对应的大写的中文字? 比如:壹万贰千弎百肆十伍。

public static string Capitalization(double B_SW) 

long L_SW,L_I=0; 
// string [] S_BW_FIG={"零","一","二","三","四","五","六","七","八","九","整"}; 
string [] S_BW_FIG={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖","整"}; 
string [] S_UNIT={"分","角","元","十","百","千","万","十","百","千","亿","十","百","千"}; 
string S_BW="";bool B_Flag=true; 
L_SW=(long)(100*B_SW+0.5); 
while (L_SW>0) 
{    
if (L_SW%10!=0 ) 

S_BW=S_BW_FIG[L_SW%10]+S_UNIT[L_I]+S_BW;B_Flag=true; 

else 

if ((L_I==2 & (long)(100*B_SW)/100>0) || (L_I==6 & (long)(100*B_SW)/1000000>0 & ((long)(100*B_SW)/1000000)%10000>0 ) || (L_I==10 & (long)(100*B_SW)/10000000000>0)) 

S_BW=S_UNIT[L_I]+S_BW;B_Flag=false; 

else 

if (L_I>2 & B_Flag)  

S_BW=S_BW_FIG[L_SW%10]+S_BW;B_Flag=false; 

else 

if (L_I!=6 || L_I!=10) B_Flag=false; 





L_SW=L_SW/10;L_I++; 

if ((long)(100*B_SW+0.5)%100==0) S_BW+="整";    
return S_BW; 
}

在C语言,将人民币的小写金额转换为大写金额涉及到对数字的每一位进行处理,并且对中文大写金额表述。以下是一个简单的实现步骤,假设输入的小写金额是合法的,并且已经处理过输入错误的情况: 1. 首先,需要定义中文大写数字和单位,以及可能用到的辅助函数,如判断是否为零的函数等。 2. 然后,将小写金额分为整数部分和小数部分进行处理。整数部分从个位数开始,逐位转换成大写,并根据位数添加相的单位(如十、百、、万等);小数部分则转换为角和分。 3. 在转换过程,要注意连续的零只能保留一个,并且在整数部分超过万元时,要加上“大写金额超万元”的表述。 下面是一个简化版的代码示例,仅供参考: ```c #include <stdio.h> #include <string.h> #include <math.h> const char *numCn[] = {"零", "壹", "", "叁", "肆", "伍", "陆", "柒", "捌", "玖"}; const char *unitCn[] = {"", "拾", "佰", "仟"}; const char *bigUnitCn[] = {"", "万", "亿", "万亿"}; const char *smallUnitCn = {"角零分"}; void printNum(int num, int isDecimal) { if (isDecimal) { if (num == 0 && strlen(smallUnitCn) == 1) { printf("零"); } else { printf("%s%s", numCn[num], smallUnitCn); } } else { if (num == 0 && strlen(unitCn) == 1) { printf("%s", numCn[num]); } else { printf("%s%s", numCn[num], unitCn[num]); } } } void printMoney(long long money) { int i, unit = 0; int zeroFlag = 0; int temp = 0; char numStr[32]; memset(numStr, 0, sizeof(numStr)); // 整数部分 long long integerPart = money / 100; long long decimalPart = money % 100; sprintf(numStr, "%lld", integerPart); for (i = strlen(numStr) - 1; i >= 0; i--) { temp = numStr[i] - '0'; if (temp == 0) { if (zeroFlag == 0) { printf("%s", "零"); zeroFlag = 1; } } else { zeroFlag = 0; printNum(temp, 0); if (unit == 0) { printf("%s", bigUnitCn[unit]); } else { printf("%s", unitCn[unit]); } unit++; if (unit > 3) { printf("%s", bigUnitCn[unit]); unit = 0; } } } // 小数部分 if (decimalPart != 0) { printf("点"); printNum(decimalPart / 10, 1); printNum(decimalPart % 10, 1); } else { printf("%s", smallUnitCn); } } int main() { long long money; scanf("%lld", &money); printMoney(money); return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值