 |
08.01.2012, 15:46
|
#1
|
|
|
|
Разведчик
|
 Регистрация: 15.04.2010
 Сообщений: 11
 Популярность: -15
 Сказал(а) спасибо: 23
Поблагодарили 8 раз(а) в 6 сообщениях
|
Как реализовать сумму прописью на С++
Как реализовать сумму прописью на С++
Пример на C
 |
Цитата: |
 |
|
|
|
|
|
|
|
{
if (in == " ") return "";
if (in == "000") return "";
AnsiString out = "";
AnsiString sotni[9] =
{"сто", "двести", "триста", "четыреста", "пятьсот",
"шестьсот", "семьсот", "восемьсот", "девятьсот"};
AnsiString dubl[10] =
{"десять", "одиннадцать", "двенадцать", "тринадцать", "четырнадцать",
"пятнадцать", "шестнадцать", "семнадцать", "восемнадцать", "девятнадцать"};
AnsiString des[8] =
{"двадцать", "тридцать", "сорок", "пятьдесят",
"шестьдесят", "семьдясят", "восемьдясят", "девяносто"};
AnsiString ed[9] = {"один", "два", "три", "четыре", "пять", "шесть","семь", "восемь", "девять"};
AnsiString edj[9] = {"одна", "две", "три", "четыре", "пять", "шесть","семь", "восемь", "девять"};
AnsiString ind[5] = {"", " тысяч", " миллион", " миллиард", " триллион"};
AnsiString post;
if (in[1] != \' \') if (in[1] != \'0\')
{ out = out + sotni[StrToInt(in[1])-1]; }
if (in[2] == \'1\')
{ out = out + " " + dubl[StrToInt(in[3])]; }
if (in[2] != \'1\') if (in[2] != \' \') if (in[2] != \'0\')
{ out = out + " " + des[StrToInt(in[2])-2]; }
if (in[3] != \'0\') if (in[2] != \'1\')
{
if (tn == 1)
out = out + " " + edj[StrToInt(in[3])-1];
if (tn != 1)
out = out + " " + ed[StrToInt(in[3])-1];
}
if (tn>0) if (in[2] != \'1\')
{
if (tn==1) switch (in[3])
{
case \'1\': post = ind[tn] + "а"; break;
case \'2\': post = ind[tn] + "и"; break;
case \'3\': post = ind[tn] + "и"; break;
case \'4\': post = ind[tn] + "и"; break;
default : post = ind[tn] + ""; break;
}
if ((tn==2)||(tn==3)||(tn==4)) switch (in[3])
{
case \'1\': post = ind[tn] + ""; break;
case \'2\': post = ind[tn] + "а"; break;
case \'3\': post = ind[tn] + "а"; break;
case \'4\': post = ind[tn] + "а"; break;
default : post = ind[tn] + "ов"; break;
}
}
else
{
switch (tn)
{
case 1 : post = ind[tn]; break;
default : post = ind[tn] + "ов"; break;
}
}
out = out + post;
return out;
}
AnsiString summa(AnsiString in)
{
AnsiString out;
AnsiString trs[5];
AnsiString tro[5];
AnsiString buf;
int n,s;
div_t dr;
while (in.Length() < 15)
{
in = " " + in;
}
for (n=0;n<5;n++) trs[n] = in;
trs[0] = trs[0].Delete(1,in.Length()-3);
trs[1] = trs[1].Delete(1,in.Length()-6).Delete(4,4);
trs[2] = trs[2].Delete(1,in.Length()-9).Delete(4,6);
trs[3] = trs[3].Delete(1,in.Length()-12).Delete(4,9);
trs[4] = trs[4].Delete(1,in.Length()-15).Delete(4,12);
for (n=0;n<5;n++)
{
tro[n] = triada(trs[n],n);
}
out = " "+tro[4]+" "+tro[3]+" "+tro[2]+" "+tro[1]+" "+tro[0]+" ";
out = out.Trim();
return out;
}
//--------------------------------------------------------------------------------------
// / summa.h |
|
 |
|
 |
|
Работает так:
 |
Цитата: |
 |
|
|
|
|
|
|
|
AnsiString s = summa("123"); |
|
 |
|
 |
|
|
|
|
09.01.2012, 02:28
|
#2
|
|
|
|
Пехотинец
|
 Регистрация: 06.02.2011
 Сообщений: 69
 Популярность: 49
 Сказал(а) спасибо: 102
Поблагодарили 54 раз(а) в 31 сообщениях
|
Re: Как реализовать сумму прописью на С++
Вот посмотри я тут у себя нарыл , Попробуй красным я выделил, должно помочь.Читай код внимательно.
 |
Цитата: |
 |
|
|
|
|
|
|
|
#include <vcl.h>
#include <SysUtils.hpp>
#include "Num2Str.h"
const char *m1[]
={"один ","два ","три ","четыре ","пять ","шесть ","семь ","восемь ","девять "};
const char *f1[]
={"одна ","две ","три ","четыре ","пять ","шесть ","семь ","восемь ","девять "};
const char *n10[]
={"десять ","двадцать ","тридцать ","сорок ","пятьдесят ","шестьдесят ",
"семьдесят ","восемьдесят ","девяносто "};
const char *first10[]
={"одиннадцать ","двенадцать ","тринадцать ","четырнадцать ","пятнадцать ",
"шестнадцать ","семнадцать ","восемнадцать ","девятнадцать "};
const char *n100[]
= {"сто ","двести ","триста ", "четыреста ","пятьсот ","шестьсот ","семьсот ",
"восемьсот ","девятьсот "};
const char *kop[] = {"тийин","тийин","тийин"};
const char *rub[] = {"сум ","сум ","сум "};
const char *tsd[] = {"тысяча ","тысячи ","тысяч "};
const char *mln[] = {"миллион ","миллиона ","миллионов "};
const char *mrd[] = {"миллиapд ","миллиаpдa","миллиapдoв "};
const char *cnt[] = {"тысяча ","тысячи ","тысяч "};
const char *cent[] = {"цент США","цента США","центов США"};
const char *doll[] = {"доллар ","доллара ","долларов "};
AnsiString Triada(unsigned int I, unsigned int n, bool k,bool usd)
{
unsigned int a,gender,sfx;
AnsiString Result = "";
sfx=3;
if(n==2) gender = 0;
else gender = 1;
a = I / 100;
if (a > 0)
{
Result += n100[a-1];
I -= a*100;
}
if (I>19)
{
a = I / 10;
if (a>0)
{
Result += n10[a-1];
I -= a*10;
if (I>0)
{
if (k) gender = 0;
if (gender==1) Result += m1[I-1];
else Result += f1[I-1];
switch(I) {
case 1: sfx=1; break;
case 2:
case 3:
case 4: sfx=2; break;
case 5:
case 6:
case 7:
case 8:
case 9: sfx=3;break;
}
}
}
}
else {
switch(I) {
case 1:
if (k) gender=0;
if (gender==1) Result += m1[I-1];
else Result +=f1[I-1] ;
sfx=1;
break;
case 2: case 3: case 4:
if (k) gender = 0;
if (gender==1) Result += m1[I-1];
else Result += f1[I-1];
sfx=2;
break;
case 5: case 6: case 7: case 8: case 9:
if (k) gender=0;
if (gender==1) Result += m1[I-1];
else Result += f1[I-1];
sfx=3;
break;
case 10:
Result += n10[0];
sfx=3;
break;
case 11: case 12: case 13: case 14: case 15: case 16:
case 17: case 18: case 19:
Result += first10[I-11];
sfx=3;
break;;
}
}
switch(n) {
case 1:
if (!k) {
if (usd)
Result += doll[sfx-1];
else
Result += rub[sfx-1];
}
else {
if (usd)
Result += cent[sfx-1];
else
Result +=kop[sfx-1];
}
break;
case 2:
if (!k)
Result += tsd[sfx-1];
else {
if (usd)
Result += cent[sfx-1];
else
Result +=kop[sfx-1];
}
break;
case 3:
if (!k)
Result += mln[sfx-1];
else {
if (usd)
Result += cent[sfx-1];
else
Result += kop[sfx-1];
}
break;
case 4:
if (!k)
Result += mrd[sfx-1];
else {
if (usd)
Result += cent[sfx-1];
else
Result += kop[sfx-1];
}
break;
}
return Result;
}
AnsiString TriadaK(unsigned int I, bool kpk, bool usd)
{
AnsiString Result;
unsigned int sfx,H;
if (kpk)
{
Result = "";
sfx=3;
H=(I % 10);
switch(H) {
case 1: sfx=1; break;
case 2: case 3: case 4: sfx=2; break;
}
if ((I >= 11) && (I <= 19)) sfx=3;
if (usd)
{
if (I<10) Result = "0"+IntToStr(I)+" "+cent[sfx-1];
else Result = IntToStr(I)+" "+cent[sfx-1];
}
else
{
if (I<10) Result ="0"+IntToStr(I)+" "+kop[sfx-1];
else Result=IntToStr(I)+" "+kop[sfx-1];
}
}
else
{
if (I==0)
{
if (usd)
Result = "00 центов США";
else
Result = "00 тийин";
}
else
Result = Triada(I,1,true,usd);
}
return Result;
}
AnsiString MoneyToString(double S, bool kpk, bool usd)
{
unsigned int I,H;
AnsiString V;
AnsiString f,l;
double s1;
AnsiString Result;
V="";
s1=S;
H=1000000000;
I=S/H;
if (I>0)
{
V = Triada(I,4,false,usd);
int tmp = S/H;
S -= tmp*H;
}
H=1000000;
I=S/H;
if (I>0)
{
V += Triada(I,3,false,usd);
int tmp = S/H;
S -= tmp*H;
}
H=1000;
I=S/H;
if (I>0)
{
V += Triada(I,2,false,usd);
int tmp = S/H;
S -= tmp*H;
}
H=1;
I=(S/H);
if (I>0)
{
V += Triada(I,1,false,usd);
int tmp = S/H;
S -= tmp*H;
}
else {
if (usd)
V += doll[2];
else
V += rub[2];
}
I = S*100;
AnsiString s = S * 100;
V += s + " тийин";
if (s1 < 1) V = "ноль " + V;
f = AnsiUpperCase(V.SubString(1,1));
l = V.SubString(2,256);
V = f+l;
Result = V;
return Result;
} |
|
 |
|
 |
|
|
|
|
09.01.2012, 02:49
|
#3
|
|
|
|
Разведчик
|
 Регистрация: 15.04.2010
 Сообщений: 11
 Популярность: -15
 Сказал(а) спасибо: 23
Поблагодарили 8 раз(а) в 6 сообщениях
|
Re: Как реализовать сумму прописью на С++
Нет не помогло
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Заявление об ответственности / Список мошенников
Часовой пояс GMT +4, время: 19:15.
|
 |