C_and_CPP 板


LINE

string convertL(long long); int main(int argc, char* argv[]) { int digit[] = {922,3372,10,10,5807}; long long n = 0; for(int i = 0; i < 5 ; i++) { n *= 10000; n += digit[i]; } cout << n << "=" << convertL(n) << endl; system("PAUSE"); return EXIT_SUCCESS; } string unit[] = {"","万","亿","兆","金"}; string num1[] = {"零","壹","贰","参","肆","伍","陆","柒","捌","玖"}; string num2[] = {"","拾","佰","仟"}; EX: 1234 从 4 开始往前转换 若不为 4 位数,则 *zero 保证 true,且 loop 只跑到不为 0 的位数结束 若为 4 位数且无任何 0,则 loop 等同於 do { s.insert(0,num1[inNum%10],num2[i]); inNum /= 10; i++; } while(inNum > 0); 出现非 0 数後,出现第一次 0,则补,其余不补,ex: 1001 ^^补 |不补 string convert4(int fourDigitNum, bool *zero) { string s; int i = 0,digit; bool appearNoneZero = false; do { digit = fourDigitNum % 10; fourDigitNum /= 10; if(digit > 0) { s.insert(0,num1[digit]+num2[i]); appearNoneZero = true; } else if(!(*zero) && !appearNoneZero) s.insert(0,num1[digit]); *zero = (digit == 0); i++; } while(fourDigitNum > 0); if(i < 4) *zero = true; return s; } 为 0 就不转换 num < 0 ,则负号保留,num 看成 -num 转换 每 4 位数一轮,当轮不为 0,则 先检查前一轮首位为 0 且曾出现不为 0 的数,则补"零" 再插入当轮的数和单位 否则纪录当轮首位为 0 最後看是否需要加"负" string convertL(long long num) { string s; if(num == 0) return s.insert(0,num1[0]); int i = 0,FDN = 0; bool zero = false,tailZero = true; bool neg = (num < 0); num *= (neg ? -1 : 1); do { FDN = (int)(num % 10000); num /= 10000; if(FDN > 0) { if(zero && !tailZero) s.insert(0,num1[0]); s.insert(0,convert4(FDN,&zero)+unit[i]); tailZero = false; } else zero = true; i++; } while (num > 0); s.insert(0,(neg ? "负" : "")); return s; } ※ 引述《Yshuan (倚弦)》之铭言: : 看完题目个人的想法是以下... : String sta[]; // 用来储存输出 : int top //配合sta仿stack结构 : bool dirty; : void main(){ : int n; //input number : sta = new; : top = 0; : String[] word = {"","万","亿","兆","金"...}; : int word_cnt = -1; : int remain; : while(n > 0){ : word_cnt++; : sta[top++] = word[word_cnt]; : remain = n%10000; : n = n / 10000; : convert_four(remain); : } : for(int i=top;i>=0;i--) : cout<<sta[i]; : ... : } : void convert_four(int n){ : String[] word = {"", "拾", "佰", "仟"}; : int word_cnt = -1; : int remain; : dirty = f; //初始化成 if(r==0)不补零 : while(n > 0){ : word_cnt++; // start increaing from 0 : sta[top++] = word[word_cnt]; //预设都放入word : remain = n % 10; : n = n/10; : if(remain==0){ : sta[--top] = ""; //没有余数word拿出 : if(dirty){ //跳过需补零 dirty 防止连补两次以上 : sta[top++] = "零"; : dirty = f; : } : break; //跳出回圈 不做convert(); : } : convert(remain); //将余数转成一到九 : } : } : void convert(int r){ : dirty = t; //补零开关打开 : switch(r) //那个浩大的switch : case ?: : sta[top++] = "数字一到九其中一个"; //九个case去冲 : ... : } : ---------------------------------- : 囧 不自觉得都打了 精神是stack : 先以四个位数为单位写成一个四位数转换函数 : 因为中文读法规则 习惯以10^4为一个大单位... : 十百千都重复 故写成 convert_four(int) : 不断的取remain 并且若不是零就call convert(int) : 关於放零的动作用了一个bool开关 可能有点复杂 : ... : 然後整个写完之後 才发现网站是高中生程式 XD : 假如原PO 能google stack然後看懂这篇code : 相信大学上资结会快速上手 XD! 关键字 >>> "先进後出" : 至於你原本的code 我大概懂你的概念是先一对一转换 : 再比对零的分布情形 做输出零的调整 : 个人感觉分布组合太多种 所以就不使用一堆if的写法了... : 也许有点小题大做了吧 ~ ^^! 还请板上其他高手指正一下~ --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 211.74.9.2 ※ 编辑: csihcs 来自: 211.74.9.2 (10/20 12:50) ※ 编辑: csihcs 来自: 211.74.9.2 (10/22 00:16)







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Gossiping站内搜寻

TOP