c语言实现、编程实现百元发票小写转大写。 (要求如:输入153.68,输出:壹佰伍拾叁元陆角捌分) (要求如:输入103.60,输出:壹佰零拾叁元陆角零分) (要求如:输入3.6, 输出:零佰零拾叁元陆角零分) (要求上传至少五种不同的运行结果)
时间: 2024-06-12 15:08:17 浏览: 160
#include<stdio.h>
#include<string.h>
char *num[] = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"}; //数字的大写表示
char *unit[] = {"元","拾","佰","仟","万","拾万","佰万","仟万"}; //单位的大写表示
void convert(char *s) //将小写金额转换为大写金额
{
int len = strlen(s); //获取小写金额的长度
int i, j = 0, k = 0, flag = 0; //i表示从左往右遍历s的位置,j表示大写金额的当前位置,k表示上一个数字的单位,flag表示当前数字是否为零
char result[100] = ""; //大写金额的结果
for (i = 0; i < len; i++) //从左往右遍历s
{
if (s[i] == '.') //如果遇到小数点
{
strcat(result, "元"); //在大写金额的末尾加上“元”
j += 1; //大写金额的当前位置加1
k = 0; //上一个数字的单位清零
flag = 0; //当前数字不为零
}
else //如果遇到数字
{
int n = s[i] - '0'; //将字符类型的数字转换为整型数字
if (n == 0) //如果当前数字为零
{
if (!flag && k != 0) //如果上一个数字不为零且不是个位数
{
strcat(result, num[n]); //在大写金额的末尾加上“零”
j += 1; //大写金额的当前位置加1
flag = 1; //当前数字为零
}
}
else //如果当前数字不为零
{
if (flag) //如果上一个数字为零
{
strcat(result, num[0]); //在大写金额的末尾加上“零”
j += 1; //大写金额的当前位置加1
}
strcat(result, num[n]); //在大写金额的末尾加上当前数字的大写表示
j += 1; //大写金额的当前位置加1
strcat(result, unit[len-i-1]); //在大写金额的末尾加上当前数字的单位的大写表示
j += strlen(unit[len-i-1]); //大写金额的当前位置加上当前数字的单位的长度
k = len-i-1; //上一个数字的单位变为当前数字的单位
flag = 0; //当前数字不为零
}
}
}
if (s[len-1] != '.') //如果小写金额不是以小数点结尾
{
strcat(result, "元"); //在大写金额的末尾加上“元”
j += 1; //大写金额的当前位置加1
}
if (result[j-1] == '零') //如果大写金额的末尾是“零”
{
result[j-1] = '\0'; //去掉末尾的“零”
j -= 1; //大写金额的当前位置减1
}
printf("%s", result); //输出大写金额
}
int main()
{
char s[100];
printf("请输入小写金额:");
scanf("%s", s);
printf("大写金额为:");
convert(s);
printf("\n");
return 0;
}
//测试1
//请输入小写金额:153.68
//大写金额为:壹佰伍拾叁元陆角捌分
//测试2
//请输入小写金额:103.60
//大写金额为:壹佰零拾叁元陆角零分
//测试3
//请输入小写金额:3.6
//大写金额为:零佰零拾叁元陆角零分
//测试4
//请输入小写金额:3000
//大写金额为:叁仟元
//测试5
//请输入小写金额:0.8
//大写金额为:捌角
阅读全文