64,282
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
#include <string>
using namespace std;
void math_to_chinese(int num,char * str );
void num_math(int *m,string * s,int * r);
int num_to_chinese(int num,char * ch )
{
int m[10];
string str[10],strm[10],testr;
int f,t;
char qw[13]="";
sprintf(qw,"%10d",num);
for( int i = 1 ; i <=9; i ++ )
{
m[i] = qw[i] -48;
if ( m[i] == -16 ) m[i] = 0 ;
}
for (int i = 0 ;i <= 9; i ++ )
{
math_to_chinese(m[i],(char *)str[i].c_str ());
}
for ( int i = 0 ; i <=9; i ++ )
{
strm[i] = str[i].c_str();
if ( i == 2 || i == 6 )
{
strm[i] += "千";
}
if ( i == 3 || i == 7 )
{
strm[i] += "百";
}
if ( i == 4 || i == 8 )
{
strm[i] += "十";
}
}
num_math(&m[6],&strm[6],&f);// 个,十,百,千
num_math(&m[2],&strm[2],&t);// 十万,百万,千万
string s1,s2,s3;
s1 = "亿",s2 = "万",s3 ="";
if ( m[1] == 0 )
{
strm[1] = "";
s1 = "";
if ( t == 1 )
{
s2 = "";
if ( f == 1 ) s3 = "零";// 0
}
}
else
{
if ( t == 1 )// 1 0000 1001
{
s2 = "零";
}
else
{
if ( t == 2 ||t == 3 ||t == 4 ||t == 7 ||t == 9 ||t == 11 || t== 15 ) s1 = "亿零" ;//1 0010 1001
}
}
if ( t != 1 )
{
if ( t == 2 ||t == 3 ||t == 7 ||t == 8 ||t == 9 ||t == 13 ||t == 14 || t== 15 )
{
if ( f == 2 ||f == 3 ||f == 4 ||f == 7 ||f == 9 ||f == 11 ||f== 15 ) s2 = "万零";//10101
}
if ( t == 3||t == 4 ||t == 5 ||t == 6 ||t == 10 ||t == 11 || t== 12 ) s2 = "万零"; //101001
}
if ( f == 1 )
{
if ( t == 3||t == 4 ||t == 5 )
{
s2 = "万";
}
}
if ( t == 1 && f == 1)
{
s2 = "";
}
testr = strm[1] + s1 +strm[2] + strm[3] + strm[4] + strm[5] +s2 + strm[6] + strm[7] + strm[8] + strm[9] +s3;
strcpy(ch,(char *)testr.c_str());
return 0;
}
void num_math(int * m ,string * s,int * r)
{
for (int i = 0 ; i<= 3; i ++ ) if ( m[i] == 0 ) s[i]="";
if ( m [0] == 0 && m[1] == 0 && m[2] ==0 && m[3] == 0 ) *r = 1;//0000
if ( m [0] == 0 && m[1] == 0 && m[2] ==0 && m[3] != 0 ) *r = 2;//0001
if ( m [0] == 0 && m[1] == 0 && m[2] !=0 && m[3] == 0 ) *r = 3;//0010
if ( m [0] == 0 && m[1] != 0 && m[2] ==0 && m[3] == 0 ) *r = 4;//0100
if ( m [0] != 0 && m[1] == 0 && m[2] ==0 && m[3] == 0 ) *r = 5;//1000
if ( m [0] != 0 && m[1] != 0 && m[2] ==0 && m[3] == 0 ) *r = 6;//1100
if ( m [0] == 0 && m[1] == 0 && m[2] !=0 && m[3] != 0 ) *r = 7;//0011
if ( m [0] != 0 && m[1] == 0 && m[2] ==0 && m[3] != 0 ) //1001
{
s[1] = "零";
*r = 8;
}
if ( m [0] == 0 && m[1] != 0 && m[2] ==0 && m[3] != 0 ) //0101
{
s[2] = "零";
*r = 9;
}
if ( m [0] != 0 && m[1] == 0 && m[2] !=0 && m[3] == 0 ) //1010
{
s[1] = "零";
*r = 10;
}
if ( m [0] == 0 && m[1] != 0 && m[2] !=0 && m[3] == 0 ) *r = 11;//0110
if ( m [0] != 0 && m[1] != 0 && m[2] !=0 && m[3] == 0 ) *r = 12;//1110
if ( m [0] != 0 && m[1] != 0 && m[2] ==0 && m[3] != 0 ) //1101
{
s[2] = "零";
*r = 13;
}
if ( m [0] != 0 && m[1] == 0 && m[2] !=0 && m[3] != 0 ) //1011
{
s[1] = "零";
*r = 14;
}
if ( m [0] == 0 && m[1] != 0 && m[2] !=0 && m[3] != 0 ) *r = 15;//0111
}
void math_to_chinese(int num,char * str )
{
switch(num)
{
case 0:
strcpy( str,"零");
break;
case 1:
strcpy( str,"一");
break;
case 2:
strcpy( str,"二");
break;
case 3:
strcpy( str,"三");
break;
case 4:
strcpy( str,"四");
break;
case 5:
strcpy( str,"五");
break;
case 6:
strcpy( str,"六");
break;
case 7:
strcpy( str,"七");
break;
case 8:
strcpy( str,"八");
break;
case 9:
strcpy( str,"九");
break;
}
}
int main()
{
char * resu;
resu = (char *) malloc (128 );
int number ;
cout << "请输入一个大于0且小于10亿的整数:" << endl;
while (cin >> number && number < 1000000000)
{
if (num_to_chinese(number,resu)) ;
cout << resu << endl;
}
cout << "EXIT";
free ( resu );
return 0;
}
void num_math(int * m ,string * s,int * r)
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#include<stdlib.h>
#include<assert.h>
int main()
{
char number[100], res[100], *result = res, *p = number;
int i = 0, j = 0;
const char *ptr[] =
{
{"零"}, {"壹"}, {"贰"}, {"叁"}, {"肆"}, {"伍"}, {"陆"}, {"柒"}, {"捌"}, {"玖"}
};
const char *unit[] =
{
{""}, {""}, {"拾"}, {"佰"}, {"仟"}, {"萬"}, {"拾"}, {"佰"}, {"仟"}, {"亿"}, {"拾"}, {"佰"}, {"仟"}, {"亿"}
};
memset(res, 0, 100);
memset(number, 0, 100);
printf("Input the number:");
scanf ("%s",number);
while (*p)
{
assert(isdigit(*p++));
i++;
}
for (j = 0; j < i; j++)
{
strcat(result, ptr[number[j] & 0xf]);
strcat(result, unit[i - j]);
}
printf ("%s\n", result);
system("pause");
return 0;
}