В гуглі є багато варіантів на VBA, а під c++ я не знайшов.
Переробив з VBA під Borland C++ Builder, можливо комусь ще знадобиться:
/* Usage: Num2Ukr(1981) = один тисячa дев'ятсот вісімдесят один Num2Ukr(1981,1) = один тисячa дев'ятсот вісімдесят одна */ AnsiString Num2Ukr(long int n,int female=0){ AnsiString Nums0[] = {"", "одна ", "дві ", "три ", "чотири ", "п'ять ", "шість ", "сім ", "вісім ", "дев'ять "}; AnsiString Nums1[] = {"", "один ", "два ", "три ", "чотири ", "п'ять ", "шість ", "сім ", "вісім ", "дев'ять "}; AnsiString Nums2[] = {"", "десять ", "двадцять ", "тридцять ", "сорок ", "п'ятдесят ", "шістдесят ", "сімдесят ", "вісімдесят ", "дев'яносто "}; AnsiString Nums3[] = {"", "сто ", "двісті ", "триста ", "чотириста ", "п'ятсот ", "шістсот ", "сімсот ", "вісімсот ", "дев'ятсот "}; AnsiString Nums4[] = {"", "одна ", "дві ", "три ", "чотири ", "п'ять ", "шість ", "сім ", "вісім ", "дев'ять "}; AnsiString Nums5[] = {"десять ", "одинадцять ", "дванадцять ", "тринадцять ", "чотирнадцять ", "п'ятнадцять ", "шістнадцять ", "сімнадцять ", "вісімнадцять ", "дев'ятнадцять "}; if(n==0) return "нуль"; AnsiString st1 = n; if(st1.Length()>10) return "дуже багато :)"; AnsiString Result; int c[10]; for(int a=9;a>=0;a--){ c[a] = 0; if(st1.Length()>a){ c[a] = st1.SubString(1,1).ToIntDef(0); st1 = st1.Delete(1,1); } } // 9 if(c[9]>0){ if(c[9]==1) Result = (AnsiString)Nums1[c[9]]+"мільярд "; if((c[9]>=2)&&(c[9]<=4)) Result = (AnsiString)Nums1[c[9]]+"мільярди "; if(c[9]>=5) Result = (AnsiString)Nums1[c[9]]+"мільярдів "; } // 8 if(c[8]>0){ Result = (AnsiString)Result+Nums3[c[8]]; if((c[7]==0)&&(c[6]==0)) Result = (AnsiString)Result+"мільйонів "; } // 7 if(c[7]>0){ if(c[7]==1) Result = (AnsiString)Result+Nums5[c[6]]+"мільйонів "; if(c[7]>1){ Result = (AnsiString)Result+Nums2[c[7]]; if(c[6]==0) Result = (AnsiString)Result+"мільйонів "; } } // 6 if((c[6]>0)&&(c[7]!=1)){ if(c[6]==1) Result = (AnsiString)Result+Nums1[c[6]]+"мільйон "; if((c[6]>=2)&&(c[6]<=4)) Result = (AnsiString)Result+Nums1[c[6]]+"мільйона "; if(c[6]>=5) Result = (AnsiString)Result+Nums1[c[6]]+"мільйонів "; } // 5 if(c[5]>0){ Result = (AnsiString)Result+Nums3[c[5]]; if((c[4]==0)&&(c[3]==0)) Result = (AnsiString)Result+"тисяч "; } // 4 if(c[4]>0){ if(c[4]==1) Result = (AnsiString)Result+Nums5[c[3]]+"тисяч "; if(c[4]>1){ Result = (AnsiString)Result+Nums2[c[4]]; if(c[3]==0) Result = (AnsiString)Result+"тисяч "; } } // 3 if((c[3]>0)&&(c[4]!=1)){ if(c[3]==1) Result = (AnsiString)Result+Nums1[c[3]]+"тисячa "; if((c[3]>=2)&&(c[3]<=4)) Result = (AnsiString)Result+Nums1[c[3]]+"тисячі "; if(c[3]>=5) Result = (AnsiString)Result+Nums1[c[3]]+"тисяч "; } // 2 if(c[2]>0){ Result = (AnsiString)Result+Nums3[c[2]]; } // 1 if(c[1]>0){ if(c[1]==1) Result = (AnsiString)Result+Nums5[c[0]]; if(c[1]>1) Result = (AnsiString)Result+Nums2[c[1]]; } // 0 if((c[0]>0)&&(c[1]!=1)){ if(female) Result = (AnsiString)Result+Nums0[c[0]]; else Result = (AnsiString)Result+Nums1[c[0]]; } return Result; }
No comments:
Post a Comment