首页 > 代码库 > 循环-19. 币值转换
循环-19. 币值转换
输入一个整数(位数不超过9位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式。如23108元,转换后变成“贰万叁仟壹百零捌”元。为了简化输出,用小写英文字母a-j顺序代表大写数字0-9,用S、B、Q、W、Y分别代表拾、百、仟、万、亿。于是23108元应被转换输出为“cWdQbBai”元。
输入格式:
输入在一行中给出一个不超过9位的非负整数。
输出格式:
在一行中输出转换后的结果。注意“零”的用法必须符合中文习惯。
输入样例1:
813227345
输出样例1:
iYbQdBcScWhQdBeSf
输入样例2:
6900
输出样例2:
gQjB
代码太乱,逻辑也乱,有几个要点
一是数组右移
二是全0
三是多个连续的0只输出一个零
四是万如果为0,要特别的打出一个W
#include <iostream>#include <stdio.h>#include <math.h>#include<string>int main(){ char shuzi[10];//数字转换字母的数组 for(int i=0;i<10;i++) { shuzi[i]=97+i; // printf("%c",shuzi[i]); } char danwei[9];//将单位转换 danwei[0]=‘Y‘; danwei[1]=danwei[5]=‘Q‘; danwei[2]=danwei[6]=‘B‘; danwei[3]=danwei[7]=‘S‘; danwei[4]=‘W‘; danwei[8]=‘A‘; int num[9]={0};//num完成了对数组的右移,1234转变为000001234 //利用栈接受数字 int stack[9]; for(int i=0;i<=8;i++) { stack[i]=88; } int i=0; char c; //进栈 while((c=getchar())!=‘\n‘) { stack[i++]=c-‘0‘; // printf("%d",stack[i-1]); } //出栈 i=8; int j=8;//num数组的指示 int status=0;//检测是否有非88的数,如果有就开始出栈 while(i>=0) { if(status==0&&stack[i]!=88) { status=1; } if(status==1) { num[j]=stack[i]; j--; } i--; } //准备输出,对0要特殊处理,1001为一千零一,1100为一千一百 ,1000100为一百万零一百 for(j=0;j<=8;j++) { if(num[j]!=0)break; } if(j>8) { printf("a"); return 0; } int print_state=0; i=0; while(i<=8) { if(print_state==0&&num[i]!=0) { print_state=1; } if(print_state) { if(num[i]!=0) { if(i!=8) printf("%c%c",shuzi[num[i]],danwei[i]); else printf("%c",shuzi[num[i]]); }else { while(num[i]==0&&i<=8) { if(i==4) printf("W"); i++;} if(i<=8) { printf("a"); i--; } else { return 0; } } } i++; } return 0;}
循环-19. 币值转换
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。