数字转成汉字形式 看了其他博客的写法,多多少少有问题 问题1、10001000 应该是 一千万零一千 有的博客错误的显示为 一千零万一千 问题2、10000000 应该是 一千万 有的博客错误的显示 一千万零零 问题3、100000 应该是 十万 有的博客错误的显示 一十万 问题4、100000000 应该是一亿 有的博客错误的显示 一亿万
题目描述
做法:
#include<bits/stdc++.h> using namespace std; typedef long long ll; vector<string> translateToUpper(ll num) { string upper[]={"零","一","二","三","四","五","六","七","八","九" }; string up[] = {"","十","百","千","万","十","百","千","亿","十","百","千"}; vector<int> nums; while (num>0) { nums.push_back(num%10); num = num / 10; } vector<string> result; int hasnum=0; for (int i=nums.size()-1;i>=0;--i) { if(nums[i]==0){ int id=-1; while (i>=0 && nums[i]==0)//跳过连续的0 { if(i%4==0&&id==-1) id=i;//记录第一个 万 或者 亿 --i; } //printf("i:%d id::%dn",i,id); if(id!=-1) {//特判解决博客的问题1和问题2的零的顺序问题 if(hasnum) result.push_back(up[id]);//防止出现问题4一万亿情况 if(i>=0) result.push_back(upper[0]); } else result.push_back(upper[0]); ++i; } else{ result.push_back(upper[nums[i]]); result.push_back(up[i]); if(i%4==0) hasnum=0;//每四位更新一下 hasnum 是否添加亿或者万 else hasnum=1; } } if(result[0]=="一"&&result[1]=="十"){//特判防止博客中的问题3 vector<string> ans; for(int i=1;i<result.size();++i) ans.push_back(result[i]); return ans; } else return result; } int main() { while(1) { ll x; scanf("%lld",&x); vector<string> ans=translateToUpper(x); for(auto v:ans) cout<<v; puts(""); } } /* 1200 0112 3001 10021111 10111111 101111 10001111 10000000 100000000 100010001 100000100 100100100 */
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算