این برنامه تا 999 میلیلرد جواب می ده البته با C#‎ نوشتم ولی الگوریتمش تغریبا یکیه ....


private string numToStr(ulong num,int level)
{
string [][]numstr=new string[][]
{
new string[]{"صفر","یک","دو","سه ","چهار","پنج","شش","هفت","هشت","ن ه"},
new string[]{"ده","یازده","دوا ده","سیزده","چهارده","پانزده", "شانزده","هفتده","هیجده","نوزد ه",
"بیست","سی","چهل","پنجاه","شست"," هفتاد","هشتاد","نود"},
new string[]{"","صد","دویست","سی صد","چهارصد","پانصد","ششصد","هف تصد","هشتصد","نهصد"} ,
new string[]{"هزار"},
new string[]{"میلیون"},
new string[]{"میلیارد"}
};
switch (level)
{
case 1:
if(num<10)
return numstr[0][Convert.ToInt32(num) ];
else
{
if(num%100<20 && num%100>9)
{
if(num<20)
return numstr[1][Convert.ToInt32(num%10&# 41;];
else
return numToStr(num/100,3)+" و "+numstr[1][Convert.ToInt32(num%10 )];
}
else
return numToStr(num/10,2)+((num%10!=0)?" و "+numstr[0][Convert.ToInt32(num%10 )]:"");
}
case 2:
if(num<10)
return numstr[1][Convert.ToInt32(num%10+8 )];
else
return numToStr(num/10,3)+((num%10>=2 )?" و "+numstr[1][Convert.ToInt32(num%10 +8)]:"");
case 3:
if(num<10)
return numstr[2][Convert.ToInt32(num%10&# 41;];
else
return numToStr(num/10,4)+((num%10!=0)?" و ":"")+numstr[2][Convert.ToInt3 2(num%10)];
case 4:
if(num<1000)
return numToStr(num,1)+" "+numstr[3][0];
else
return numToStr(num/1000,5)+((Convert.ToInt32(num%1000 )!=0)?" و "+numToStr(num%1000,1)+" "+numstr[3][0]:"");
case 5:
if(num<1000)
return numToStr(num,1)+" "+numstr[4][0];
else
return numToStr(num/1000,6)+((Convert.ToInt32(num%1000 )!=0)?" و "+numToStr(num%1000,1)+" "+numstr[4][0]:"");
case 6:
if(num<1000)
return numToStr(num,1)+" "+numstr[5][0];
else
return "";
default:
return "";
}
}