2019寒假作业2(币值转换)编程总结
7-1 币值转换 (20 分)
输入一个整数(位数不超过9位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式。如23108元,转换后变成“贰万叁仟壹百零捌”元。为了简化输出,用小写英文字母a-j顺序代表大写数字0-9,用S、B、Q、W、Y分别代表拾、百、仟、万、亿。于是23108元应被转换输出为“cWdQbBai”元。
输入格式:
输入在一行给出1个正整数N(≤1000)和一个符号,中间以空格分隔。
输出格式:
在一行中输出转换后的结果。注意“零”的用法必须符合中文习惯。
输入样例1:
813227345
输出样例1:
iYbQdBcScWhQdBeSf
输入样例2:
6900
输出样例2:
gQjB
1).实验代码
#include<stdio.h>
#include<math.h>
int main()
{
int i=-1,x,y,z,m,n,h,l,a;
char c='a';
scanf("%d",&x);
y=x;
if(x==0){
printf("a");
}
do{
x=x/10;
i++;
}while(x!=0);
do{
if(i>=4){
h=y/10000;
l=i-4;
}
if(i<4){
h=y;
l=i;
}
a=pow(10,l);
m=pow(10,i);
z=y/m;
if(z==0&&z!=n&&h%a!=0){
printf("a");
}
if(z!=0){
printf("%c",c+z);
if(i==8){
printf("Y");
}
if(i==7||i==3)
printf("Q");
if(i==6||i==2){
printf("B");
}
if(i==5||i==1){
printf("S");
}
if(i==4){
printf("W");
}
}
if(i==4&&z==0){
printf("W");
}
if(n==0&&i==3&&z==0){
printf("a");
}
y=y%m;
i--;
n=z;
}while(y!=0);
return 0;
}
2).设计思路
第一步:运用do-while循环将输入值反复除以10求出输入值的位数。
第二步:利用公式结合do-while循环逐个求出输入值从左到右的数字并判断在每个数字后输出的符号。
3)。本题调试过程碰到的问题以及解决办法
碰到的问题:部分正确。
解决办法:将while改为do-while,在第二个do-while中加入if(z!=0){printf("%c",c+z);。
碰到的问题:部分正确。
解决办法:在第二个do-while后面加入n=z以保存上一位的值,再将if(z!=0){改为if(z!=0&&在z!=n){。
碰到的问题:部分正确。
解决办法:在第二个do-while前面加入if(i>=4){
h=y/10000;
l=i-4;
}
if(i<4){
h=y;
l=i;
}
a=pow(10,l);判断当前数后面几位数是否都为0,再将if(z!=0&&在z!=n){改为if(z==0&&z!=n&&h%a!=0){。