华为oj初级 人民币转换

    xiaoxiao2021-03-25  75

    题目:人民币转换 描述 考试题目和要点: 1、中文大写金额数字前应标明“人民币”字样。中文大写金额数字应用壹、贰、叁、肆、伍、陆、柒、捌、玖、拾、佰、仟、万、亿、元、角、分、零、整等字样填写。(30分) 2、中文大写金额数字到“元”为止的,在“元”之后,应写“整字,如¥ 532.00应写成“人民币伍佰叁拾贰元整”。在”角“和”分“后面不写”整字。(30分) 3、阿拉伯数字中间有“0”时,中文大写要写“零”字,阿拉伯数字中间连续有几个“0”时,中文大写金额中间只写一个“零”字,如¥6007.14,应写成“人民币陆仟零柒元壹角肆分“。(40分) 知识点 字符串 运行时间限制 10M 内存限制 128 输入 输入一个doulbe数 输出 输出人民币格式 注: 下面乱码为: 人民币拾伍万壹仟壹佰贰拾壹元壹角伍分

    人民币拾伍万壹仟壹佰贰拾壹元壹角伍分 样例输入 151121.15 样例输出 �����ʰ����ҼǪҼ�۷�ʰҼԪҼ����� 整个程序只考虑小数点前不超过12位的情况,整体思路: 先将小数点前后字符串分开,对小数点后的情况比较简单,至多需要讨论小数点后两位。 下面仔细说下整数部分: 先将不足12位的高位置‘x’或任意其他字符,然后分三段处理,每一段为4位。即分别处理以亿、万、元为单位的区间。这部分对应change4ToZH函数

    #include<iostream> #include<string> using namespace std; string ZH[]={"壹","贰","叁","肆","伍","陆","柒","捌","玖"}; string changeRightToZH(string right); string change4ToZH(string input,bool *zero); //人民币转换 void main() { double d; cin>>d; string str=""; string output = ""; char dd[100]; sprintf_s(dd,100,"%f",d); str = (string)dd; int point = str.find("."); string left;//小数点后 string leftout = ""; if(point != str.npos) { left = str.substr(point+1); if(left.length() > 0 ) { if(left[0] != '0') leftout += ZH[left[0] - '1'] + "角"; if(left.length()>1 &&left[1] != '0') leftout += ZH[left[1] - '1'] + "分"; } str = str.substr(0,point); } output = changeRightToZH(str); if(leftout =="") output += "整"; else output += leftout; cout<<output; //system("pause"); } string change4ToZH(string input,bool *zero) { string str=""; if(input[0]!='0') { if(input[0]!='x') { if(*zero==true) str+='零'; str+=ZH[input[0]-'1']+"仟"; *zero=false; } } else { *zero=true; } if(input[1]!='0') { if(input[1]!='x') { if(*zero==true) str+='零'; str+=ZH[input[1]-'1']+"佰"; *zero=false; } } else { *zero=true; } if(input[2]!= '0' ) { if(input[2] != 'x') { if(*zero == true) str += '零'; if(input[2]!= '1') str += ZH[input[2] - '1'] ; str +="拾"; *zero = false; } } else { *zero = true; } if(input[3]!= '0' ) { if(input[3] != 'x') { if(*zero == true) str += '零'; str += ZH[input[3] - '1'] ; *zero = false; } } else *zero = true; return str; } //将小数点左端转换为中文 string changeRightToZH(string right) { string output = ""; int length =12- right.length(); for(int i = 0 ; i<length;i++) right = 'x' + right; string buffstr=""; bool zero =false; buffstr = change4ToZH(right.substr(0,4),&zero); if(buffstr != "") output += buffstr + "亿"; buffstr = change4ToZH(right.substr(4,4),&zero); if(buffstr != "") output += buffstr + "万"; buffstr = change4ToZH(right.substr(8,4),&zero); output += buffstr; if(output == "") output = "零"; return "人民币"+output+"元"; }
    转载请注明原文地址: https://ju.6miu.com/read-39820.html

    最新回复(0)