阿拉伯数字转大写汉字

  这是我在大二学习C++时写的一段代码,功能是实现将金额的阿拉伯数字转换为大写汉字。在银行,会计等方面用处很大,希望对大家有所帮助。以下是在Visual C++ 6.0下调试通过的源代码:

 

#include<iostream.h> #include<string.h> void main() { int num=0,j=0; /*变量j用来存储各个位上的数值*/ int x=0; /*负数标记*/ int k=0,l=0,m=0,n=0; /*分别记录千万位至万位是否输出过零*/ int a=0,b=0,c=0,d=0; /*分别记录千位至个位是否输出过零*/ int temp1=0,temp2=0,temp4=0,temp5=0; /*用来解决高四位和低四位重复输出的零*/ char c1[]={"壹"},c2[]={"贰"},c3[]={"叁"},c4[]={"肆"},c5[]={"伍"},c6[]={"陆"},c7[]={"柒"},c8[]={"捌"},c9[]={"玖"},c0[]={"零"}; char *string[]={c0,c1,c2,c3,c4,c5,c6,c7,c8,c9}; cout<<"请输入要转换的金额(整数±99999999):/n"; cout<<"注意:数字前无'0'为十进制数/n"; cout<<"   数字前加'0'数作为八进制处理/n"; cout<<"   数字前加'0x'作为十六进制处理/n"; next: cin>>num; if(num<0) { num=-num; /*将负数取反,变为正数处理,以x=1作为负数标记*/ x=1; } if(num>99999999) {cout<<"超出范围,请重新输入:/n";goto next;} if(x){cout<<"负";x=0;} /*若负数标记x=1,则输出"负",然后重置x=0*/ if(num==0)cout<<"零"; if(num<=99999999&&num>=10000000) { j=(int)num/10000000; cout<<string[j]<<"千"; num=num-j*10000000; k++; } if(num<=9999999&&num>=1000000) { j=(int)num/1000000; cout<<string[j]<<"百"; num=num-j*1000000; l++; } if(k==1&&l==0) {cout<<"零";} if(num<=999999&&num>=100000) { j=(int)num/100000; cout<<string[j]<<"拾"; num=num-j*100000; m++; } if((k==1&&l==1&&m==0)||(l==1&&m==0)) {cout<<"零";} if(num<=99999&&num>=10000) { j=(int)num/10000; cout<<string[j]; num=num-j*10000; n++; } { { if(k==1&&l==0&&m==0&&n==0)cout<<"/b"; if(l==1&&m==0&&n==0)cout<<"/b"; } if(k==1||l==1||m==1||n==1){cout<<"万";} } if(n==0&&(k==1||l==1||m==1)){cout<<"零";temp4=4;} if(num<=9999&&num>=1000) { j=(int)(num/1000); cout<<string[j]<<"千"; num=num-j*1000; a++; } if(k==1||l==1||m==1||n==1){cout<<"零";temp1=1;} if((a==1)&&(temp1==1)){cout<<"/b";temp1=0;} if(temp4==4&&temp1==1){cout<<"/b";} if(num<=999&&num>=100) { j=(int)(num/100); cout<<string[j]<<"百"; num=num-j*100; b++; } if(a==1&&b==0) {cout<<"零";temp2=2;} if(num<=99&&num>=10) { j=(int)(num/10); cout<<string[j]<<"拾"; num=num-j*10; c++; } if(b==1&&c==0) {cout<<"零";temp5=5;} if(num<=9&&num>0) { j=num; d++; if(j!=0) {cout<<string[j];} } /*下面四个IF语句作用是对结果中多出的"零"进行处理*/ if(temp5==5&&d==0)cout<<"/b"; if(temp1==1&&a==0&&b==0&&c==0&&d==0){cout<<"/b";} if(a==1&&b==0&&c==0&&d==0&&temp2==2) {cout<<"/b";} if(b==1&&c==0&&d==0&&temp2==2) {cout<<"/b";} cout<<"圆整"<<endl; k=0,l=0,m=0,n=0; /*以下三行用来将记录状态的变量重置,以进行便下一次循环*/ a=0,b=0,c=0,d=0; temp1=0,temp2=0,temp4=0,temp5=0; //goto next; }

 


默认情况下我注释掉了最后一行的GOTO语句,这样程序每次只执行一遍,这时没有任何问题。

但如果取消掉了注释程序就会执行无限次,但这时会有一个问题:就是若输入的数不是整数,如5.0 或是 abc 程序会进入死循环,屏幕上一直输出“零圆整”。为什么会进入这个死循环,我一直也没能搞明白,希望如果有谁能知道为什么会进入这个死循环,还请告诉我一声,感激不尽。

 

你可能感兴趣的:(c,String,存储)