//修正了N次,应该可以了吧@@
//终于搞定了,8位数(千万)的转换…
//即然都讨论到这了,成果就分享给大家吧
//请用 Dev-C++ 来编译,MS-VC++ 6 大概不能用.
//而我也不懂VC++ 6….程序不知有什么潜在问题,
//目前是没找到bug,因为数目太大了,无法一个一个测.
//请用 Dev-C++ 来编译
#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,x6,x7;
// 个位数~万位数,万位数~千万位数(值:1/0 ,1=是/0=否)
int zeroX;
int a1; //万位数到千万位数 判断万位数是否有数值. 1=有 ,0=无
string ch0,ch1,ch2,ch3,ch4,ch5,ch6,ch7;
string ok1,ok2; //万以下,万以上
//使用者轮入
cout <<"请输入数字(8位数内): ";
cin >> qX;
if(qX>99999999){cout <<"位数太大或格式不正确" <<endl; return 0;}
//单位转换
x7 = qX/10000000; //千万
x6 = qX%10000000/1000000; //百万
x5 = qX%10000000%1000000/100000; //十万
x4 = qX%10000000%1000000%100000/10000; //万
x3 = qX%10000000%1000000%100000%10000/1000; //1万的余数就是千,有几千呢?? ,再除以1000就是了.
x2 = qX%10000000%1000000%100000%10000%1000/100; //万的余数是千,千的余数剩百,几百再除以100就是了.
x1 = qX%10000000%1000000%100000%10000%1000%100/10;//同上推演下来...
x0 = qX%10000000%1000000%100000%10000%1000%100%10;//同上推演下来...
//千万位数转中文
if(x7!=0){ch7 = aX(x7);} //aX(x7)呼叫自定函数处理数据,并返回结果值.
//百万位数转中文
if(x6!=0){ch6 = aX(x6);}
//十万位数转中文
if(x5!=0){ch5 = aX(x5);}
//万位数转中文
if(x4!=0){ch4 = aX(x4);}
//千位数转中文
if(x3!=0){ch3 = aX(x3);}
//百位数转中文
if(x2!=0){ch2 = aX(x2);}
//十位数转中文
if(x1!=0){ch1 = aX(x1);}
//个位数转中文
if(x0!=0){ch0 = aX(x0);}
//以下为显示结果,"零"特殊处理
zeroX = x0+x1+x2+x3;
//千万位数处理
if(x7!=0){ok2 = ok2+ch7+"千",a1=1;}
if(x7==0){ok2 = "",a1=0;} //位数0则空白,a1=0 (万位数目前为0)
//百万位数处理
if(x7!=0 && x6!=0){ok2 = ok2+ch6+"百",a1=1;}
if(x7==0 && x6!=0){ok2 = ok2+ch6+"百",a1=1;}
if(x7==0 && x6==0){ok2 = "",a1=0;} //千万和百万位数为0,则a1=0 (万位数目前为0)
if(x7!=0 && x7!=0 && x6==0 && x5+x4!=0){ok2 = ok2+"零",a1=1;}
//十万位数
if(x7+x6!=0 && x5!=0){ok2 = ok2+ch5+"十",a1=1;}
if(x7+x6==0 && x5!=0){ok2 = ok2+ch5+"十",a1=1;}
if(x7+x6==0 && x5==0){ok2 = "",a1=0;}//千万和百万和十万位数皆为0
if(x7+x6!=0 && x6!=0 && x5==0 && x4!=0){ok2 = ok2+"零";}
//万位数 -----------------
if(x7+x6+x5!=0 && x4!=0){ok2 = ok2+ch4,a1=1;}//万
if(x7+x6+x5==0 && x4!=0){ok2 = ok2+ch4,a1=1;}
if(x7+x6+x5==0 && x4==0){ok2 = "",a1=0;}//千万和百万和十万和万位数皆为0
//注: al=0的部份,在ok2中都会填上空白,在最后结果就不会显示该位数
//ok2 是存万位以上单位的结果值, ok1是千位数以下结果存放.
if(a1==1){ok2 = ok2+"万";} //万的显示时机运算
//万和千位数交接地方的特别处理
if(x4==0 && x3!=0 && a1==1){ok1 = ok1 +"零";}
//if(x4==0 && x6!=0 && x5==0 && x3!=0){ok1="";} //特级处理
//if(x4==0 && x6==0 && x5==0 && x3!=0){ok1="";} //特级处理
//if(x4==0 && x6==0 && x5!=0 && x3!=0){ok1="";} //特级处理
//if(x4==0 && x6!=0 && x5!=0 && x3!=0){ok1="";} //特级处理
//个位到千位数处理
//千位数
if(x3!=0){ok1 = ok1+ch3+"千";}
if(a1==1 && x3==0 && x2+x1+x0!=0){ok1 = ok1 +"零";}
//百位数
if(x2!=0){ok1 = ok1+ch2+"百";}
if(x3!=0 && x2==0 && x0+x1!=0){ok1 = ok1 +"零";}
//十位数
if(x1!=0){ok1 = ok1+ch1+"十";}
if(x2!=0 && x1==0 && x0!=0){ok1 = ok1 +"零";}
//个位数
if(x0!=0){ok1 = ok1+ch0;}
if(x0==0 && a1==0 && zeroX==0){cout <<"零";}
cout << ok2+ok1 <<endl; //ok2为千万到万处理结果 + ok1为千位数到个位数处理结果
return 0;
}
//转中文专用
string aX (int ok) //自定函数内容,在int main()中以aX(数值)来呼叫使用.
//数值填入要转换的单位值,如个位数是x0,则aX(x0).
{
string aa; //存放转换结果暂存区
switch(ok) //代入要转换的值
{
//case 0:
// aa="零";
//break;
case 1: //代入数值为 1 时,则处理这个程序
aa="一";
break;
case 2: //代入数值为 2 时,则处理这个程序
aa="二";
break;
case 3: //代入数值为 3 时,则处理这个程序
aa="三";
break;
case 4: //代入数值为 4 时,则处理这个程序
aa="四";
break;
case 5: //代入数值为 5 时,则处理这个程序
aa="五";
break;
case 6: //同上类推....
aa="六";
break;
case 7:
aa="七";
break;
case 8:
aa="八";
break;
case 9:
aa="九";
break;
return aa; //把结果传回int main程序代码中的呼叫位置,如aX(x7)结果就是这里的值
}
}
[此贴子已经被作者于2006-9-27 5:36:22编辑过]