程序设计入门——C语言7-131币值转换20分_第1页
程序设计入门——C语言7-131币值转换20分_第2页
程序设计入门——C语言7-131币值转换20分_第3页
程序设计入门——C语言7-131币值转换20分_第4页
程序设计入门——C语言7-131币值转换20分_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、7-131币值转换(20分)输入一个整数(位数不超过 9位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式。如23108元,转换后变成 贰万叁仟壹百零捌”元。为了简化输出,用小写英文字母a-j顺序代表大写数字 0-9,用S、B、Q、W、Y分别代表拾、百、仟、万、亿。于是23108元应被转换输出为 acWdQbBai 元。输入格式:输入在一行中给出一个不超过9位的非负整数。输出格式:在一行中输出转换后的结果。注意零”的用法必须符合中文习惯。输入样例1:813227345输出样例1:IYbQdBcScWhQdBeSf6900输出样例2:gQjB/*前言:写注释和别人不写注释是让程序员

2、头痛的两件小事。而写注释的根本目的是让别人理解你的思路(也让自己理清我的思路)。能搜到这篇答案的同学,一般不是单纯为了抄,更多的还是想弄懂。所以为了不让你头痛,我就头痛下,尽量通过注释把我的思路讲清楚。 */* 基本思路:定义两个指针数组,其下标与for循环的i 一一对应。使用for循环从亿位向个位遍历,先整除再取余逐次获得CNY的首位再舍去。获得首位后通过i匹配两个指针数组,先输出大写,再输出单位。*/* 边界条件1 :CNY千万位,万位)、千位,个位)两个半开半闭区间含有一个或多个0。如:1001、1011,0001 (英文书写习惯:10,110,001中文习惯是:读且只读一个零,如:壹仟

3、壹、壹仟零零壹,都是错误读法。 TOC o 1-5 h z 最终找到的解决思路1:读最低位的零一一如果当前位为零,并且下一位非零。*/* 边界条件2: CNY万千万位,万位卜千位,个位两个闭区间含有1个或多个0。如:1110,1000、1110,0000 。中文阅读习惯是:末尾的零不读,(个人认为 1110,1000读作:壹仟壹佰壹拾万)毒保零,不含零的读法才是对的。)根据思路1 :读最低为的零。1110,1000千位为1,万位读零错误:壹仟壹佰壹拾)万壹保零。所以i!=4。如果题目要求读的数上限到兆,下限到分,则 i!=8 & i!=0。*/* 边界条件3:亿万元和仟佰拾相比,是特殊的单位。

4、所以即使万位和个位为零,也要输出单位。即: i=4 | i=0 。如果题目要求读的数上限到兆,则 i=8 。*/*总结:只是一道练习题,不必太较真。感觉主要是考察对边界条件的探查,边界条件摸清楚了,思路也就清晰了。我一开始也找不到思路,做到后面思路才清晰的。所以上手摸索很重要!我一开始甚至搜过怎么画流程图,现在觉得边界条件不清楚,画流程图也是枉然。应该以边界条件为导向!写代码要给注释!写完代码要试图优化它一一重构!*/#include #include #define Ten(i) (int)pow(10,(i)/* 调用math.h的pow函数求10的i次方,返回结果为double型,强制类

5、型转换为int型。define简化为Ten(i)。 */ int main(int argc, char *argv口)char *Caps10= 零,壹,贰,叁,肆,伍,陆,柒,捌,玖;/ 也可以用枚举和 switch-case 。char *unit9=元,拾,佰,仟,万,拾,佰,仟,亿;/下标和for循环的i对应。int CNY,i,start=0;scanf(%d”,&CNY);if(CNY=0)该分支不能省略,因为 0 不能进入 if(start=0)&if(CNY/Ten(i)=1) 分支。printf(零元);return 0;for(i=8;i=0;i-)/从亿位向个位遍历if

6、(start=0)/*先找到不为零的首位。该分支不能省略,因为 else分支 if(|i=4|)”条CNY松9999时会先输出“万。*/if(CNY/Ten(i)=1)/首位肯定不为零start=1;找到非零首位后start=1 ,下一循开始环转入else分支。printf(%s,CapsCNY/Ten);/ 输出首位大写printf(%s,uniti);/ 输出首位单位CNY%=Ten(i);/取余舍去首位)else / 如果 start=1if(CNY/Ten(i)=1)/如果当前位不为零printf(%s,CapsCNY/Ten); else/如果当前位为零if(i!=4&i!=0)/*

7、如果当前位不为万位。i!=0保护后面Ten(i-1)不越界。*/if(CNY%Ten(i)/Ten(i-1)=1)/*如果后一位不为零。如:101、1001、10001 ,读最低位的零。*/printf(%s,CapsCNY/Ten(i);/ 输出当前位大写 if(CNY/Ten(i)=1|i=4|i=0)/如果当前位不为零或者当前位为万位或者个位printf(%s,uniti);/输出当前位单位CNY%=Ten(i);)return 0;/取余舍弃首位3 HYPERLINK https:/pintia.crVproblem https:/pintia.crVproblem sets/1163

8、28644965904 3840/pioblem$/117428850699060235人#include #include #define Ten(i) (int)pow(10,(i)*/* 调用math.h的pow函数求10的i次方,返回结果为double型,强制类型转换为int型。define简化为Ten(i) int main(int argc, char *argv口)char Caps10=a,b,c,d,e,f,g,h,i,j;也可以用枚举和 switch-case 。char unit9=,S,B,Q,W,S,B,Q,Y;/下标和 for 循环的 i对应。int CNY,i,s

9、tart=0;scanf(%d,&CNY);if(CNY=0)/该分支不能省略,因为 0 不能进入 if(start=0)&if(CNY/Ten(i)=1) 分支。printf(a);return 0;)for(i=8;i=0;i-)/从亿位向个位遍历if(start=0)/*先找到不为零的首位。该分支不能省略,因为 else分支 if(|i=4|)”条CNY松9的9时会先输出“万。*/if(CNY/Ten(i)=1)/首位肯定不为零start=1;找到非零首位后start=1 ,下一循开始环转入else分支。printf(%c,CapsCNY/Ten);/ 输出首位大写if(i!=0) printf(%c,uniti);/ 输出首位单位CNY%=Ten(i);/取余舍去首位) else / 如果 start=1if(CNY/Ten(i)=1)/如果当前位不为零printf(%c,CapsCNY/Ten);else /如果当前位为零if(i!=4&i!=0)/*如果当前位不为万位。i!=0保护后面Ten(i-1)不越界。*/if(CNY%Ten(i)/Ten(i-1)=1)/*如果后一位不为零。如:101、1001、1000

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论