Вот такая прога. Водишь число, а комп тебе пишет его словами.
#include "iostream.h"
#include "string.h"
class Number
{
public:
int p1,p2,p3,p4,p5,p6,p7;
int Power (int PARAM);
char String[200];
char P1[20], P2[20], P3[20], P4[20], P5[20], P6[20], P7[20];
void SetParts (int POWER, int NUMBER);
void SetTitleOfNumbers (int PART, int OPTION, int FirstSecond);
void CreateResult ();
void LastNumber (int LAST_NUMBER, int OPTOINS);
Number()
{
p1=p2=p3=p4=p5=p6=p7=0;
strcpy(P1,"");strcpy(P5,"");
strcpy(P2,"");strcpy(P6,"");
strcpy(P3,"");strcpy(P7,"");
strcpy(P4,"");strcpy(String,"");
}
};
void main()
{
int number;
cout<<"Please, enter the number (0 - 9999999):\n";
cin>>number;
Number zx;
int power = zx.Power(number);
zx.SetParts(power,number);
zx.SetTitleOfNumbers(zx.p7,1,1);
zx.SetTitleOfNumbers(zx.p6,10,1);
zx.SetTitleOfNumbers(zx.p5,100,1);
zx.SetTitleOfNumbers(zx.p4,1,2);
zx.SetTitleOfNumbers(zx.p3,10,2);
zx.SetTitleOfNumbers(zx.p2,100,2);
zx.SetTitleOfNumbers(zx.p1,1,3);
zx.CreateResult();
cout<<"\n"<<zx.String<<"\n"<<endl;
}
void Number::LastNumber(int LAST_NUMBER, int OPTIONS)
{
char PP[20];
strcpy(PP,"");
switch (LAST_NUMBER)
{
case 1:
{ strcpy(PP,"odinadtsat' "); break; }
case 2:
{ strcpy(PP,"dvenadtsat' "); break; }
case 3:
{ strcpy(PP,"trinadtsat' "); break; }
case 4:
{ strcpy(PP,"4etirnadtsat' "); break; }
case 5:
{ strcpy(PP,"pyatnadtsat' "); break; }
case 6:
{ strcpy(PP,"shestnadtsat' "); break; }
case 7:
{ strcpy(PP,"semnadtsat' "); break; }
case 8:
{ strcpy(PP,"vosemnadtsat' "); break; }
case 9:
{ strcpy(PP,"devyatnadtsat' "); break; }
}
switch (OPTIONS)
{
case 1:
{ strcpy(P3,PP); break; }
case 2:
{ strcpy(P6,PP); break; }
}
}
void Number::CreateResult()
{
if (p1!=0)
{
strcpy(String,P1);
if (p1==1)
{ strcat(String,"million "); }
if (p1==2 || p1==3 || p1==4)
{ strcat(String,"milliona "); }
if (p1==5 || p1==6 || p1==7 || p1==8 || p1==9)
{ strcat(String,"millionov ");}
}
if (p2!=0)
{ strcat(String,P2); }
if (p3!=0)
{
if (p3==1)
if (p4!=0)
{
LastNumber(p4,1);
p4=0;
}
strcat(String,P3);
}
if (p4!=0)
{ strcat(String,P4); }
if (p4==0&&((p3==0&&p2!=0)||(p3!=0&&p2==0)||(p3!=0&&p2!=0&&p1!=0)))
{ strcat(String,"tisya4' "); }
if (p4==5 || p4==6 || p4==7 || p4==8 || p4==9)
{ strcat(String,"tisya4' "); }
if (p4==1)
{ strcat(String,"tisya4a "); }
if (p4==2 || p4==3 || p4==4)
{ strcat(String,"tisya4i "); }
if (p5!=0)
{ strcat(String,P5); }
if (p6!=0)
{
if (p6==1)
if (p7!=0)
{
LastNumber(p7,2);
p7=0;
}
strcat(String,P6);
}
if (p7!=0)
{ strcat(String,P7); }
}
void Number::SetTitleOfNumbers(int PART, int OPTION, int FirstSecond)
{
char PP[20];
strcpy (PP,"");
switch (OPTION)
{
case 1:
{
switch (PART)
{
case 1:
{ strcat (PP,"odin "); break; }
case 2:
{ strcat (PP,"dva "); break; }
case 3:
{ strcat (PP,"tri "); break; }
case 4:
{ strcat (PP,"4etire "); break; }
case 5:
{ strcat (PP,"pyat' "); break; }
case 6:
{ strcat (PP,"shest' "); break; }
case 7:
{ strcat (PP,"sem' "); break; }
case 8:
{ strcat (PP,"vosem' "); break; }
case 9:
{ strcat (PP,"devyat' "); break; }
}
switch (FirstSecond)
{
case 1:
{ strcpy(P7,PP); break; }
case 2:
{
strcpy(P4,PP);
if (PART==2)
{ strcpy(P4,"dve "); }
if (PART==1)
{ strcpy(P4,"odna "); }
break;
}
case 3:
{ strcpy(P1,PP); break; }
}
break;
}
case 10:
{
switch (PART)
{
case 1:
{ strcat (PP,"desyat' "); break; }
case 2:
{ strcat (PP,"dvadtsat' "); break; }
case 3:
{ strcat (PP,"tridtsat' "); break; }
case 4:
{ strcat (PP,"sorok "); break; }
case 5:
{ strcat (PP,"pyat'desyat "); break; }
case 6:
{ strcat (PP,"shest'desyat "); break; }
case 7:
{ strcat (PP,"semdesyat "); break; }
case 8:
{ strcat (PP,"vosemdesyat"); break; }
case 9:
{ strcat (PP,"devyanosto' "); break; }
}
switch (FirstSecond)
{
case 1:
{ strcpy(P6,PP); break; }
case 2:
{ strcpy(P3,PP); break; }
}
break;
}
case 100:
{
switch (PART)
{
case 1:
{ strcat (PP,"sto "); break; }
case 2:
{ strcat (PP,"dvesti "); break; }
case 3:
{ strcat (PP,"trista "); break; }
case 4:
{ strcat (PP,"4etiresta "); break; }
case 5:
{ strcat (PP,"pyat'sot "); break; }
case 6:
{ strcat (PP,"shest'sot "); break; }
case 7:
{ strcat (PP,"sem'sot "); break; }
case 8:
{ strcat (PP,"vosem'sot "); break; }
case 9:
{ strcat (PP,"devyat'sot "); break; }
}
switch (FirstSecond)
{
case 1:
{ strcpy(P5,PP); break; }
case 2:
{ strcpy(P2,PP); break; }
}
break;
}
}
}
int Number::Power(int PARAM)
{
int raz=1;
bool temp=1;
while (temp)
{
int e=PARAM%10;
if (PARAM/10==0)
{
temp=false;
}
else
{
PARAM=(PARAM-e)/10;
raz++;
}
}
return raz;
}
void Number::SetParts(int POWER, int NUMBER)
{
switch (POWER)
{
case 1:
{
p7=NUMBER;
break;
}
case 2:
{
p7=NUMBER%10;
p6=(NUMBER-p7)/10;
break;
}
case 3:
{
p7=NUMBER%10;
p6=((NUMBER-p7)/10)%10;
p5=(((NUMBER-p7)/10)-p6)/10;
break;
}
case 4:
{
p7=NUMBER%10;
p6=((NUMBER-p7)/10)%10;
p5=((((NUMBER-p7)/10)-p6)/10)%10;
p4=(((NUMBER-p7)/10-p6)/10-p5)/10;
break;
}
case 5:
{
p7=NUMBER%10;
p6=((NUMBER-p7)/10)%10;
p5=((((NUMBER-p7)/10)-p6)/10)%10;
p4=((((NUMBER-p7)/10-p6)/10-p5)/10)%10;
p3=((((NUMBER-p7)/10-p6)/10-p5)/10-p4)/10;
break;
}
case 6:
{
p7=NUMBER%10;
p6=((NUMBER-p7)/10)%10;
p5=((((NUMBER-p7)/10)-p6)/10)%10;
p4=((((NUMBER-p7)/10-p6)/10-p5)/10)%10;
p3=(((((NUMBER-p7)/10-p6)/10-p5)/10-p4)/10)%10;
p2=(((((NUMBER-p7)/10-p6)/10-p5)/10-p4)/10-p3)/10;
break;
}
case 7:
{
p7=NUMBER%10;
p6=((NUMBER-p7)/10)%10;
p5=((((NUMBER-p7)/10)-p6)/10)%10;
p4=((((NUMBER-p7)/10-p6)/10-p5)/10)%10;
p3=(((((NUMBER-p7)/10-p6)/10-p5)/10-p4)/10)%10;
p2=((((((NUMBER-p7)/10-p6)/10-p5)/10-p4)/10-p3)/10)%10;
p1=((((((NUMBER-p7)/10-p6)/10-p5)/10-p4)/10-p3)/10-p2)/10;
break;
}
}
}