将阿拉伯数字转化为中文数字,如12à“一十二”
1)考虑不包含0的数字
#include<stdio.h>
void main()
{
int m;
int c[10];
int i = 0;
char a[10][3] = {"零", "一", "二", "三", "四", "五", "六", "七", "八", "九"};
char b[10][3] = {"", "十", "百", "千", "万", "十", "百", "千", "亿", "十"};
// int型的最大数为2147483647,大于此数程序将输出错误结果
printf("Please input an integer not larger than 21,4748,3647: ");
scanf("%d", &m);
while(m)
{
c[i++] = m % 10;
m /= 10;
}
i--;
while(i >= 0)
{
printf("%s%s", a[c[i]],b[i]);
i--;
}
printf("/n");
}
2)考虑0全在右边的情况,如10,000
#include<stdio.h>
void main()
{
int m;
int c[10];
int i = 0;
char a[10][3] = {"零", "一", "二", "三", "四", "五", "六", "七", "八", "九"};
char b[10][3] = {"", "十", "百", "千", "万", "十", "百", "千", "亿", "十"};
// int型的最大数为2147483647,大于此数程序将输出错误结果
printf("Please input an integer not larger than 21,4748,3647: ");
scanf("%d", &m);
while(m)
{
c[i++] = m % 10;
m /= 10;
}
i--;
int zeroFlag = 0;
int flag = 0; // flag的作用是保证“万”只被输出一次
while(i >= 0)
{
if(c[i] == 0)
{
// 考虑“亿”和“万”的情况
if(i % 4 == 0 && flag == 1)
{
printf("%s", b[i/4*4]);
flag = 0;
}
zeroFlag = 1;
}
else
{
printf("%s%s", a[c[i]],b[i]);
if(i%4 != 0)
{
flag = 1;
}
else
{
flag = 0;
}
}
i--;
}
printf("/n");
}
3)最后考虑0出现在中间的情况
#include<stdio.h>
void main()
{
int m;
int c[10];
int i = 0;
char a[10][3] = {"零", "一", "二", "三", "四", "五", "六", "七", "八", "九"};
char b[10][3] = {"", "十", "百", "千", "万", "十", "百", "千", "亿", "十"};
// int型的最大数为2147483647,大于此数程序将输出错误结果
printf("Please input an integer not larger than 21,4748,3647: ");
scanf("%d", &m);
while(m)
{
c[i++] = m % 10;
m /= 10;
}
i--;
int zeroFlag = 0;
int flag = 0; // flag的作用是保证“万”只被输出一次
while(i >= 0)
{
if(c[i] == 0)
{
// 考虑“亿”和“万”的情况
if(i % 4 == 0 && flag == 1)
{
printf("%s", b[i/4*4]);
flag = 0;
}
zeroFlag = 1;
}
else
{
if(zeroFlag == 1 && i%4 != 3 )
printf("零%s%s", a[c[i]],b[i]);
else
printf("%s%s", a[c[i]],b[i]);
zeroFlag = 0;
if(i%4 != 0)
flag = 1;
else
flag = 0;
}
i--;
}
printf("/n");
}