人民币转换的考试题,急求
将键盘输入的一实数转换成人民币的大写形式。
要求:1. 此实数的最小范围为21亿;
2. 在必要的时候要添加“零”、“整”;
3. 可以进行四舍五入。
例如:输入1000005008.9978
输出为:壹拾亿伍仟零玖元整
输入1000005008.902
输出为:壹拾亿伍仟零捌元玖角整
输入1000005008.906
输出为:壹拾亿伍仟零捌元玖角壹分
具体要求
1 输入要转换的实数;
输入的容错处理
2 调用函数convert(),将转换结果保存于变量result;
3 输出(必须形成一个串)
4四舍五入
同时,将人民币分成整数和小数两部分
5 转换整数部分
if(某位不是0)
{ if(前一位也不是0) 进行转换;
else { if(不是段的第1位) 添零;进行转换;
设零标志位; }
设连续四个零标志位; }
else
if(前一位不是0)设零标志位;
加单位或加“元”
6 转换小数部分
a. 当没有小数时,直接在整数后加一个“整”;
b. 当没有“分”时,在“角”后加一个“整”
如果具体要求作不到或看不懂就算了,只要能出来就行,谢谢大家了。
问题点数:50、回复次数:16Top
1 楼chenhu_doc(^0^纯一狼^0^ 看书看到大笑,直到不能自已)回复于 2006-06-03 13:29:57 得分 0
自己没有一点思路,如果...就cut了!Top
2 楼chenhu_doc(^0^纯一狼^0^ 看书看到大笑,直到不能自已)回复于 2006-06-03 13:32:33 得分 0
自己先考虑考虑。。。
然后把自己的想法和代码贴出来,哪怕是有很多的错误,csdn上的朋友都会很热心的!!Top
3 楼laiwusheng(风清扬)回复于 2006-06-03 13:37:46 得分 0
http://topic.csdn.net/t/20050404/17/3907956.htmlTop
4 楼laiwusheng(风清扬)回复于 2006-06-03 13:37:58 得分 0
接分Top
5 楼chenhu_doc(^0^纯一狼^0^ 看书看到大笑,直到不能自已)回复于 2006-06-03 13:41:26 得分 0
回车键后,小写内容变成大写人民币形式,怎么实现??
------------------------
这是什么? 没有什么帮助呀!! 乱贴一气!!Top
6 楼hslinux(幻世龙)回复于 2006-06-03 15:30:40 得分 0
先转化成字符串,然后就再去判断,转换。Top
7 楼tailzhou(尾巴)回复于 2006-06-05 14:16:07 得分 0
要求:1. 此实数的最小范围为21亿;---》是数字不大于21亿吧?
这样的数字的整数部分可以用32的INT存储的,
使用scanf("%d.%d",&i,&j)就可以分解出整数与小数部分了,然后再分别做转换;Top
8 楼SamuelKevin(曼陀罗)回复于 2006-06-05 14:19:59 得分 0
楼上的,如果小数点后是037那请问你的j怎么办。
转换成字符串就成了Top
9 楼tailzhou(尾巴)回复于 2006-06-06 10:50:03 得分 0
就不能稍变通一下么?
int i,j;
scanf("%s",num);
if (sscanf(num,"%d.%4d",&i,&j)==1) j=0;
Top
10 楼tailzhou(尾巴)回复于 2006-06-06 10:55:35 得分 0
然后四舍五入:j=j/100.0+0.5
int jiao=j/10;
int fen=j%10;
Top
11 楼happytang(一只叫苏格拉底的猪)回复于 2006-06-06 11:15:59 得分 0
仅供参考
#include "stdlib.h"
#include "string.h"
void main()
{
char number[][3]={"零","壹","贰","参","肆","伍","陆","柒","捌","染"};
char bit[][3]={" ","拾","佰","仟","万"};
char bit1[][3]={"","万","亿","兆"};
char inputNumber[30] = {0};
char outputNumber[100][3] = {0};//输出整数
char outputDecimal[100][3] = {0};//输出小数
int len=0, len1=0, i=0, j=0, m_int=0, m_bit=0, m_bit1 = 0, temp = 0;
char *ch;
//memcpy(inputNumber, '\0' ,30);//清零
printf("please intput the number:");
scanf("%s",&inputNumber);
len = strlen(inputNumber)-1;
if(len<12)//判断是否大于12位数
{
ch = strchr(inputNumber,'.');
if(ch == NULL)
{
for(i = len; i>=0; i--)
{
if(m_bit>3)
{
m_bit = 0;
m_bit1++;
strcpy(outputNumber[j],bit1[m_bit1]);
j++;
}
if(inputNumber[i] == 48)//如果是零
{
if(m_bit != 0 && inputNumber[i+1] != 48)
{
strcpy(outputNumber[j],number[inputNumber[i]-48]);
j++;
}
while(inputNumber[i]-48 == 0)
{
if(m_bit>3)
{
m_bit = 0;
m_bit1++;
strcpy(outputNumber[j],bit1[m_bit1]);
j++;
}
i--;
m_bit++;
}
}
strcpy(outputNumber[j],bit[m_bit]);
j++;
strcpy(outputNumber[j],number[inputNumber[i]-48]);
j++;
m_bit++;
}
len1 = j;
for(i=j; i>=0; i--)
{
printf("%s",outputNumber[i]);
}
}
else//如果输入是小数
{
len1 = ch - inputNumber-1;
for(i = len1; i>=0; i--)//整数部分处理
{
if(m_bit>3)
{
m_bit = 0;
m_bit1++;
strcpy(outputNumber[j],bit1[m_bit1]);
j++;
}
if(inputNumber[i] == 48)//如果是零
{
if(m_bit != 0 && inputNumber[i+1] != 48)
{
strcpy(outputNumber[j],number[inputNumber[i]-48]);
j++;
}
while(inputNumber[i]-48 == 0)
{
if(m_bit>3)
{
m_bit = 0;
m_bit1++;
strcpy(outputNumber[j],bit1[m_bit1]);
j++;
}
i--;
m_bit++;
}
}
strcpy(outputNumber[j],bit[m_bit]);
j++;
strcpy(outputNumber[j],number[inputNumber[i]-48]);
j++;
m_bit++;
}
temp = j, j = 0;
strcpy(outputDecimal[j],"点");//小数部分处理
j++;
for(i = len1+2; i<=len; i++)//小数部分处理
{
strcpy(outputDecimal[j],number[inputNumber[i]-48]);
j++;
}
for(i=temp; i>=0; i--)
{
printf("%s",outputNumber[i]);
}
for(i=0; i<j; i++)
{
printf("%s",outputDecimal[i]);
}
}
}
else
{
printf("Sorry,You input the number is too long!");
}
}
Top
12 楼happytang(一只叫苏格拉底的猪)回复于 2006-06-06 11:19:27 得分 0
详细看:
http://www.programfan.com/club/old_showbbs.asp?id=21078&page=1
(1) 输入的容错处理算法:
do
{ printf("pleaseinputrenminbi(<%f):",pow(10,4*DUAN));
scanf("%s",money);
s=money;dot=0;tag=0;
while(*s!='\0')
{if(dot>1||(*s!='.'&&*s<'0'||*s>'9'))
{printf("Inputerror!!Pleaseinputagain:");tag=1; break;}
if(*s=='.') dot++;
s++;
}
}while(tag==1);
(2)四舍五入处理算法
s1=rmb;s2="";
while(*rmb!='\0')
{if(*rmb=='.') { *rmb++='\0'; s2=rmb; break; }
else rmb++;
}
l=strlen(s1);
if(l>4*DUAN){printf("Theinputistoolarge!!Pleaseadjust!\n"); exit(0);}
rmb=s1; s3=rmb+l-1;
while(rmb<s3) { c=*rmb; *rmb=*s3; *s3=c; s3--; rmb++;}
if(s2[2]>='5') jin=1;
for(i=1;i>=0&&jin==1;i--)
if(s2[i]=='9') s2[i]='0';
else {s2[i]++; jin=0;}
s2[2]='\0';
for(i=0;i<l&&jin==1;i++)
if(s1[i]=='9') s1[i]='0';
else { s1[i]++; jin=0; }
if(jin==1) { s1[l]='1'; s1[l+1]='\0'; l++; }
(3)转换小数部分;
void xiaotostr(char *xiao)
{ static char *a[]={"jiao","fen"};
if(*xiao=='\0'||(*xiao=='0'&&*(xiao+1)=='0'))
{ strcat(result,"zheng"); return; }
strcat(result,digit[(*xiao-'0')]); strcat(result,a[0]);
xiao++;
if(*xiao=='0') strcat(result,"zheng");
else
{ strcat(result,digit[(*xiao-‘0')]);
strcat(result,a[1]);
}
}
(4)转换整数部分:
void zhengtostr(char *zheng)
{ int r[10][10],i,j,tag,tagj;
tag=0;
for(i=DUAN-1;i>=0&&tag==0;i--)
for(j=3; j>=0 &&tag==0;j--)
{ if(*zheng!='\0') r[i][j]=*zheng-'0'; else { tag=1; break;}
zheng++; }
tag=0; i++; j++;
for(i--;i<3;i++)
{ if(j>=4) j=0;
tagj=0;
for(;j<4;j++)
{ if(r[i][j]!=0)
{ if(tag==0) 进行转换;
else { if(j!=0) 添加零;进行转换;
tag=0; }
tagj=1; }
else
if(tag==0) tag=1;
if(j==3)
if(tagj==1||i==2)添加单位;
}
}
Top
13 楼SamuelKevin(曼陀罗)回复于 2006-06-06 11:47:19 得分 0
把浮点数转换成字符串的代码 dec表示小数点位置 sign符号
打印的处理见楼上的 我就不写拉
#include <stdio.h>
#include <stdlib.h>
#define MAX 30
int main()
{
char str[MAX];
double n;
int dec; //小数点位置
int sign; //符号
while ( scanf("%lf", &n)!=EOF )
{
ecvt(n,str,&dec,&sign);
len = dec+2+flags(str,dec);
ecvt(n,str,&dec,&sign);
}
}
int flags(char s[],int end)
{
int i;
for (i=0; i<end; i++)
{
if ( s[i]!='9' )
{
return 1;
}
}
return 0;
}Top
14 楼yzhg_cgl(Little Fish)回复于 2006-06-06 16:41:30 得分 0
/*--------------------------------------------------------------------------------------
This file was written by Little Fish.
--------------------------------------------------------------------------------------*/
#include <stdio.h>
#include <stdlib.h>
typedef struct FLOAT
{
long integer;/*整数部分*/
long deci;/*小数部分*/
}FLOAT;
FLOAT ScanFun();
char *Convert(FLOAT *);
void main()
{
Float rmb;
char *p=NULL;
rmb=ScanFun();/*些函数实现输入,把输入作为一个字符串,分解出两个整数*/
p=Convert(&rmb);/* 四舍五入并不难*/
printf("%s",p);
free(p);
}Top
15 楼yzhg_cgl(Little Fish)回复于 2006-06-06 16:42:37 得分 0
更正:
/*--------------------------------------------------------------------------------------
This file was written by Little Fish.
--------------------------------------------------------------------------------------*/
#include <stdio.h>
#include <stdlib.h>
typedef struct FLOAT
{
long integer;/*整数部分*/
long deci;/*小数部分*/
}FLOAT;
FLOAT ScanFun();
char *Convert(FLOAT *);
void main()
{
FLOAT rmb;
char *p=NULL;
rmb=ScanFun();/*些函数实现输入,把输入作为一个字符串,分解出两个整数*/
p=Convert(&rmb);/* 四舍五入并不难*/
printf("%s",p);
free(p);
}
Top
16 楼tailzhou(尾巴)回复于 2006-06-07 12:42:54 得分 0
#include <iostream>
#define NUM_MAXLENGTH 100
char *unit[]={"","拾","佰","仟"};
char *seg[]={"","万","亿"};
char *number[10]={"零","壹","贰","参","肆","伍","陆","柒","捌","玖"};
void printnum(int num)
{
int i=0;
int j=num;
int k=1;
while(j>=10)
{
j=j/10;
++i;
k*=10;
}
printf("%s%s",number[j],unit[i]);
j=num%k;
if (j>0)
{
if((j*10%k)/10==j)
{
printf("零");
}
printnum(j);
}
}
int main()
{
int a,b;
int i,j,k;
char num[NUM_MAXLENGTH];
input:
printf("input an decimal please:");
scanf("%s",num);
a=0;
b=0;
i=0;
k=1;
bool isafterpoint=false;
for (i=0;num[i]!='\0';++i)
{
if(num[i]=='.' && !isafterpoint)
{
isafterpoint=true;
continue;
}
if (num[i]>'9' || num[i]<'0')
{
printf("input error:it is not a number!\n");
goto input;
}
if (isafterpoint)
{
k*=10;
b=b*10+(num[i]-'0');
}
else
{
if (i>=9 && (a>210000000 || (a==210000000 && (num[i]-'0')>0)))
{
printf("input error:the number must be less than 2.1 billion!\n");
goto input;
}
a=a*10+(num[i]-'0');
}
}
//四舍五入
b=(b*100.0/k+0.5);
if (b/100>0)
{
a++;
b-=100;
}
//转换整数
if (a>0)
{
i=2;
j=100000000;
while(i>=0)
{
k=a/j;
if (k>0)
{
printnum(k);
printf("%s",seg[i]);
}
--i;
a=a%j;
j=j/10000;
}
printf("元");
if (b==0)
{
printf("整");
}
}
//转换小数
if (b>0)
{
i=b/10;
j=b%10;
if (i>0)
{
printf("%s角",number[i]);
}
if (j>0)
{
printf("%s分",number[j]);
}
else
{
printf("整");
}
}
return 0;
}
D:\projects\cl>4181482
input an decimal please:1000005008.9978
壹拾亿伍仟零玖元整
D:\projects\cl>4181482
input an decimal please:1000005008.902
壹拾亿伍仟零捌元玖角整
D:\projects\cl>4181482
input an decimal please:1000005008.906
壹拾亿伍仟零捌元玖角壹分
D:\projects\cl>4181482
input an decimal please:1232003405.338
壹拾贰亿参仟贰佰万参仟肆佰零伍元参角肆分
D:\projects\cl>4181482
input an decimal please:60432036.8456
陆仟零肆拾参万贰仟零参拾陆元捌角伍分
D:\projects\cl>4181482
input an decimal please:2060432036.8456
贰拾亿陆仟零肆拾参万贰仟零参拾陆元捌角伍分Top




