楼兰 噪音:编程题: 阿拉伯数字转换成中国传统的形式如:1011->一千零一拾一

来源:百度文库 编辑:高考问答 时间:2024/04/30 23:04:27

给你一个思路:
1、首先将要转换的数字的各位的字符取出,例如1011分别为:A=1;B=0;C=1;D=;取出的方法是:
A=INT(1011/1000)
B=INT(1011/100)-10*A
C=INT(1011/10)-100*A-10*B
D=1011-1000*A-100*B-10*C
2、设置一个函数,分别将A,B,C,D转换成A1="一",B1="另",C1="一",D1="一"
3、最后ZH=A1+B1+C1+D1即可

讲算法(C语言):
先定义一个字符型数组,其逻辑意义就是分别表示
个位,十位,百位....

然后用:sprintf()函数将要转换的阿拉伯数字输出到
这个数组中,其结果就是将各位数字分别赋给各个数组
元素。然后可以根据数组的长度确定最高位的读法,
如:
number=1087输出到数组a[]中为:

sprintf(a,"%d",number);

a[0]=1,a[1]=0,a[2]=8,a[3]=7
长度为四,则最高位的读法为:千
次高位为:百
再次为:十
再次为:个位。
读就根据该位的大小,0就读零。

你可以根据此算法自己编写,应该能行的。

字符串数组 A 存放数位 ['十','百','千','万','十','百','千','亿']

字符串数组 B 存放数值
['零','一','二','三',...,'十']

字符串栈 S 存放结果


i 是输入的整数
p = -1;

变量的状态转变遵从如下过程:

t = i / 10;
d = i - t;
i = t;
LOOP UNTILL i := 0
t = i / 10;
d = i - t;
i = t;
p = (p+1)%8;
ENDLOOP

变量 i 重复地被 10 除,第一次除法运算之后将 B[d]直接压栈,此后则将 B[d] 与 A[p] 连接后再压栈,当处理完所有数位之后将结果从 S 中弹出,连接成为一个字符串作为最终结果。通过设置一个标志,可以将所有相邻的以 B[0] 开头的栈中元素,如[“四万”“零千”“零百”“二十”“三”]中的[“零千”“零百”] ,转变为一个字符串“零”加入到最终结果中:“四万零二十三”。