设为首页收藏本站

新微赢技术网

 找回密码
 注册
搜索
热搜: 回贴
查看: 1748|回复: 8
打印 上一主题 下一主题

[求助]编一个把数字转化成汉字念法的程序

[复制链接]
跳转到指定楼层
1#
发表于 2009-11-4 00:31:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
编写程序使能够输入一个数字,把他的汉字念法显示在屏幕上.
例如:您输入14785,
输出结果为:一万四千七百八十五.
到万就可以了,多了更好,有能力的高手谢谢帮哈忙!!!
油箱:ghostzwn2008@126.com
2#
发表于 2009-11-4 00:31:17 | 只看该作者
我只是学几天的新手,用目前想到的换算...(数学跟本没什么概念,以下慢慢实验出来的公式)
换算好之后,如果变成汉字就好办了,但是我不会,没学到足够语法用,不好意思...
(Dev C++ 测试可用)

补充:公式是利用int没有小数点的”整数”特性算的,无条件去掉了小数点,
(假如结果需要小数点显示,这个公式是有问题的.)

#include <iostream>
using namespace std;

int main()
{
int qX=0;
int x0,x1,x2,x3,x4;

cout <<"请输入数字(5位数内): ";
cin >> qX;

x0 = qX/10000;
x1 = qX%10000/1000; //1万的余数就是千,有几千呢?? ,再除以1000就是了.
x2 = qX%10000%1000/100; //万的余数是千,千的余数剩百,几百再除以100就是了.
x3 = qX%10000%1000%100/10;//同上推演下来...
x4 = qX%10000%1000%100%10;//同上推演下来...

cout << x0 <<"万";
cout << x1 <<"千";
cout << x2 <<"百";
cout << x3 <<"拾";
cout << x4 <<"." <<endl;

return 0;
}
回复 支持 反对

使用道具 举报

3#
发表于 2009-11-4 00:31:18 | 只看该作者
//哈哈,研发出来了,试好久耶,成功!!

#include <iostream>
using namespace std;
string aX(int);

int main()
{
int qX=0;
int x0,x1,x2,x3,x4;

cout <<"请输入数字(5位数内): ";
cin >> qX;

x0 = qX/10000;
x1 = qX%10000/1000; //1万的余数就是千,有几千呢?? ,再除以1000就是了.
x2 = qX%10000%1000/100; //万的余数是千,千的余数剩百,几百再除以100就是了.
x3 = qX%10000%1000%100/10;//同上推演下来...
x4 = qX%10000%1000%100%10;//同上推演下来...


cout << aX(x0) <<"万";
cout << aX(x1) <<"千";
cout << aX(x2) <<"百";
cout << aX(x3) <<"十";
cout << aX(x4) <<"." <<endl;


return 0;
}

string aX (int ok)
{
string aa;
switch(ok)
{
case 0:
aa="零";
break;

case 1:
aa="一";
break;

case 2:
aa="二";
break;

case 3:
aa="三";
break;

case 4:
aa="四";
break;

case 5:
aa="五";
break;

case 6:
aa="六";
break;

case 7:
aa="七";
break;

case 8:
aa="八";
break;

case 9:
aa="九";
break;

return aa;
}

}
回复 支持 反对

使用道具 举报

4#
发表于 2009-11-4 00:31:19 | 只看该作者
// 不用多说,上面的加强版,有关于”零”的显示时机修正.
// 自己研究出来的,因为刚学不久,可能方法有点怪怪的,数目太大可能就不行了.
// 目前是6位数字的判断. (Dev C++)

//再一次修正(2006-09-25)

#include <iostream>
#include <climits> //限制 int qX 范围为int最大值,避免输入的数目太大,造成程序误判.
using namespace std;
string aX(int);

int main()
{
int qX = INT_MAX; //储存输入值,并限范围为int最大值.
int x0,x1,x2,x3,x4,x5;

cout <<"请输入数字(6位数内): ";
cin >> qX;

x5 = qX/100000;
x4 = qX%100000/10000;
x3 = qX%100000%10000/1000; //1万的余数就是千,有几千呢?? ,再除以1000就是了.
x2 = qX%100000%10000%1000/100; //万的余数是千,千的余数剩百,几百再除以100就是了.
x1 = qX%100000%10000%1000%100/10;//同上推演下来...
x0 = qX%100000%10000%1000%100%10;//同上推演下来...

if(qX>999999){cout <<"数字太大"; return 0;}

if(x5!=0){cout << aX(x5) <<"十";}

if(x5!=0 && x4==0){cout <<"万";}
if(x4!=0){cout << aX(x4) <<"万";}

if(x5!=0 && x4!=0 && x3==0){cout <<"零";}
if(x5!=0 && x4==0 && x3==0){cout <<"零";}
if(x3!=0){cout << aX(x3) <<"千";}

if(x3!=0 && x2==0){cout <<"零";}
if(x2!=0){cout << aX(x2) <<"百";}

if(x2!=0 && x1==0){cout <<"零";}
if(x1!=0){cout << aX(x1) <<"十";}

if(x0==0){cout <<endl;}
if(x0!=0){cout << aX(x0) <<endl;}

return 0;
}

string aX (int ok)
{
string aa;
switch(ok)
{
//case 0:
// aa="零";
//break;

case 1:
aa="一";
break;

case 2:
aa="二";
break;

case 3:
aa="三";
break;

case 4:
aa="四";
break;

case 5:
aa="五";
break;

case 6:
aa="六";
break;

case 7:
aa="七";
break;

case 8:
aa="八";
break;

case 9:
aa="九";
break;

return aa;
}
}
回复 支持 反对

使用道具 举报

5#
发表于 2009-11-4 00:31:20 | 只看该作者
谢谢拉!!
回复 支持 反对

使用道具 举报

6#
发表于 2009-11-4 00:31:21 | 只看该作者
不过运行是好象有个错误!!
回复 支持 反对

使用道具 举报

7#
发表于 2009-11-4 00:31:22 | 只看该作者
测试过可以用的,看有没有少符号没复制到.或者说系统语系不一样
中文的繁体和简体是不同互通的,有乱码执行就会出错.
这是Dev-C++写的,其它的没试过…

很多代码我用Dev-C++也是错误,我不知道这论坛都用什么语言…
这程序不是很好,因为中文的”零”出现时机很难判断,
位数太大的话,以我几天的功力可写不出精确的程序.

不好意思…只能这样子^^”

补充:
若用其它编译器可能要改…
{iostream> 加个h之类的..<iostream.h>
或是改int main() 变成void main()
大概是这类错误…因为我下过这里的东西,
都要改这些才能在Dev C++用,有的不会改就无法用= =
还有要用C++编译不能用C,这二个是不一样的.
回复 支持 反对

使用道具 举报

8#
发表于 2009-11-4 00:31:25 | 只看该作者
//这是MS-VC++ 6.0写的,跟Dev-C++差好多,
//用了很久都没找出方法在VC++ 6开头使用string的自定函数.
//上面的只要using namespace std;搬到int main()里就剩3个问题了.
//也就是上面Dev-C++写的第二行string aX(int)这行搞定就可以.
//但是我都用不出来,因为VC++没用过,又刚学DevC++只好改写.
//问题就在string 在第二行不能被接受….
//
//以下是改写成MS-VC++ 6.0版的,但”零”没有特别处理,
//如何改善和精简程序,请自行研究了
//我的功力在VC++ 6只能写到此程度…不好意思.

#include <iostream>
#include <string>

int main()
{
using namespace std;
int qX=0;
int x0,x1,x2,x3,x4;

cout <<"请输入数字(5位数内): ";
cin >> qX;

x4 = qX%1000000%100000/10000;
x3 = qX%1000000%100000%10000/1000; //1万的余数就是千,有几千呢?? ,再除以1000就是了.
x2 = qX%1000000%100000%10000%1000/100; //万的余数是千,千的余数剩百,几百再除以100就是了.
x1 = qX%1000000%100000%10000%1000%100/10;//同上推演下来...
x0 = qX%1000000%100000%10000%1000%100%10;//同上推演下来...

if(qX>99999){cout <<"数字太大"; return 0;}

string aa0,aa1,aa2,aa3,aa4;

//万位数
if(x4 == 0){aa4="零";}
if(x4 == 1){aa4="一";}
if(x4 == 2){aa4="二";}
if(x4 == 3){aa4="三";}
if(x4 == 4){aa4="四";}
if(x4 == 5){aa4="五";}
if(x4 == 6){aa4="六";}
if(x4 == 7){aa4="七";}
if(x4 == 8){aa4="八";}
if(x4 == 9){aa4="九";}
cout << aa4 <<"万";

//千位数
if(x3 == 0){aa3="零";}
if(x3 == 1){aa3="一";}
if(x3 == 2){aa3="二";}
if(x3 == 3){aa3="三";}
if(x3 == 4){aa3="四";}
if(x3 == 5){aa3="五";}
if(x3 == 6){aa3="六";}
if(x3 == 7){aa3="七";}
if(x3 == 8){aa3="八";}
if(x3 == 9){aa3="九";}
cout << aa3 <<"千";

//百位数
if(x2 == 0){aa2="零";}
if(x2 == 1){aa2="一";}
if(x2 == 2){aa2="二";}
if(x2 == 3){aa2="三";}
if(x2 == 4){aa2="四";}
if(x2 == 5){aa2="五";}
if(x2 == 6){aa2="六";}
if(x2 == 7){aa2="七";}
if(x2 == 8){aa2="八";}
if(x2 == 9){aa2="九";}
cout << aa2 <<"百";

//十位数
if(x1 == 0){aa1="零";}
if(x1 == 1){aa1="一";}
if(x1 == 2){aa1="二";}
if(x1 == 3){aa1="三";}
if(x1 == 4){aa1="四";}
if(x1 == 5){aa1="五";}
if(x1 == 6){aa1="六";}
if(x1 == 7){aa1="七";}
if(x1 == 8){aa1="八";}
if(x1 == 9){aa1="九";}
cout << aa1 <<"十";


//个位数
if(x0 == 0){aa0="零";}
if(x0 == 1){aa0="一";}
if(x0 == 2){aa0="二";}
if(x0 == 3){aa0="三";}
if(x0 == 4){aa0="四";}
if(x0 == 5){aa0="五";}
if(x0 == 6){aa0="六";}
if(x0 == 7){aa0="七";}
if(x0 == 8){aa0="八";}
if(x0 == 9){aa0="九";}
cout << aa0 <<endl;

return 0;
}
回复 支持 反对

使用道具 举报

9#
发表于 2009-11-4 00:31:27 | 只看该作者
不错不错
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

申请友链|小黑屋|最新主题|手机版|新微赢技术网 ( 苏ICP备08020429号 )  

GMT+8, 2024-11-18 20:14 , Processed in 0.110283 second(s), 10 queries , Gzip On, Memcache On.

Powered by xuexi

© 2001-2013 HaiAn.Com.Cn Inc. 寰耽

快速回复 返回顶部 返回列表