Вчера начал делать сборку функций для работы с большими числами. Пока что сделано: умножение, сложение, вычисление факториала, декремент.
Вот и сам код:

string IntToString(int number)
{
if (number == 0)
return "0";
string temp="";
string returnvalue="";
while(number>0)
{
temp+=number%10+48;
number/=10;
}
for (int i=0;i<temp.length();i++)
returnvalue+=temp[temp.length()-i-1];
return returnvalue;
}
char IntToChar(int num)
{
return (num+'0');
}
string dec(string str)
{
int temp=0;
string rez="";
for (int i = str.length()-1; i >=0; i--)
{
if (str[i]!='0')
{
str[i]=IntToChar((str[i]-'0')-1);
break;
}
else
{
str[i]='9';
temp=1;
}
}
if (str[0]!='0')
{
for (int i = 0;i<str.length();i++)
rez+=str[i];
}
else
{
for (int i = 1;i<str.length();i++)
rez+=str[i];
}
return rez;
}
string add(string str1,string str2)
{
string rez="";
int a=0;
int b=0;
int temp=0;
if (str2.length()>str1.length())
{
string tmp;
tmp=str2;
str2=str1;
str1=tmp;
}
for (int i = 0; i < str2.length() ; i++)
{
a=str1[str1.length()-1-i]-'0';
b=str2[str2.length()-1-i]-'0';
if (a+b+temp<10)
{
rez=IntToString(a+b+temp)+rez;
temp=0;
}
else
{
rez=IntToString((a+b+temp)%10)+rez;
temp=1;
}
}
for (int i = 0; i < str1.length()-str2.length();i++)
{
if (temp == 1)
{
if (temp+(str1[str1.length()-i-str2.length()-1]-'0')>9)
{
rez='0'+rez;
temp=1;
}
else
{
rez=IntToString(temp+(str1[str1.length()-i-str2.length()-1]-'0'))+rez;
temp=0;
}
}
else
rez=str1[str1.length()-i-str2.length()-1]+rez;
}
if (temp==1)
rez='1'+rez;
return rez;
}
string multi(string str1, string str2)
{
int a = 0;
int b = 0;
int temp = 0;
string rez = "";
if (str2.length()>str1.length())
{
string tmp=str2;
str2=str1;
str1=tmp;
}
string *tempS= new string[str2.length()];
for (int i = 0; i < str2.length(); i++)
{
for (int j = 0; j < str1.length(); j++)
{
a=str1[str1.length()-1-j]-'0';
b=str2[str2.length()-1-i]-'0';
tempS[i]=IntToString((a*b+temp)%10)+tempS[i];
temp=(a*b+temp)/10;
}
if (temp!=0)
tempS[i]=IntToString(temp)+tempS[i];
temp=0;
}
for (int i = str2.length()-1;i>=0;i--)
{
for (int j = 0; j<i;j++)
{
tempS[i]+='0';
}
rez=add(rez,tempS[i]);
}
return rez;
}
string fact(string str)
{
return (str.length()==1 && str[0]=='1') ? "1" : multi(str,fact(dec(str))) ;
}
В общем, мне нужна помощь с оптимизацией, так как скорость совсем не радует. Я новичок в C++, так что многое, скорее всего, выглядит очень нелепо, но начинать всё же надо с чего-то

P.S. простите, код пока не оформлен.