Huawei OJ-人民币转换

    xiaoxiao2021-04-12  110

    最近一直在华为oj上刷题,刷到一道看起来简单,但是考虑因素很多的题。特此记录下来。

    附C++源码:

    #include <iostream>

    #include <vector> #include <string> using namespace std; int main() { string n;//double来接收n的值会出现各种问题(原因:浮点型在内存中不精确) string result; char words[]="分角元拾佰仟万拾佰仟亿拾佰仟"; char number[]="零壹贰叁肆伍陆柒捌玖"; cin>>n; vector<int> n1; int num_point=2; bool point=false; for(int i=0;i<n.size();i++) { if(n[i]!='.') n1.push_back(n[i]-'0'); else point=true; if(point) num_point--; } //如果分角位无值,用0补位 if(num_point>-1) { n1.push_back(0); if(num_point>0) n1.push_back(0); } //倒序,方便后续处理 for(int i=0;i<n1.size()/2;i++) { int temp=n1[i]; n1[i]=n1[n1.size()-1-i]; n1[n1.size()-1-i]=temp; } for(int i=0;i<n1.size();i++) { //无分角数字,添加“整”字 if(i==2) { if(result.size()==0) result=result+"整"; } //各位不为0时,添加各位单位 if(n1[i]!=0) { if(i>6) { bool flag=true; for(int j=6;j<i;j++) { if(n1[j]!=0) flag=false; } if(flag) result=result+"万"; } result=result+words[2*i]+words[2*i+1]; //这个条件是为了避免出现“一拾”字样 if(i==3 || i==7 || i==11) { if(n1[i]!=1) result=result+number[2*n1[i]]+number[2*n1[i]+1]; } else result=result+number[2*n1[i]]+number[2*n1[i]+1]; } else { //即使元位为0,也应添加“元”字 if(i==2) result=result+"元"; //在适当地方添加“零”,若分位为0,则不添加 if(i!=0) { if(result.size()>0) { char temp[4]; temp[0]=result[result.size()-2]; temp[1]=result[result.size()-1]; temp[2]=words[4]; temp[3]=words[5]; if((temp[0]!=number[0]||temp[1]!=number[1])&&(!(temp[0]==temp[2]&&temp[1]==temp[3]))) result=result+"零"; } } } } result=result+"币"+"民"+"人"; for(int i=result.size()-2;i>=0;i-=2) cout<<result[i]<<result[i+1]; return 0; }

    转载请注明原文地址: https://ju.6miu.com/read-667917.html

    最新回复(0)