motherboard
یک شنبه 27 بهمن 1392, 17:13 عصر
سلام خدمت همگی.کد زیر برنامه ای است که به عنوان مثال 2 به توان 1000 رو به دست می اورد.البته از اعداد دیگر هم میتونید استفاده کنید.از عیب های این برنامه سرعت کم در اجرای توان های خیلی خیلی بزرگ میباشد.:گیج:
#include <conio.h>
#include <math.h>
#include <iostream>
#include <string>
using namespace std;
//
void Tipper (string & Num)
{
int i;
char ch;
for( i=0; i< ( int(Num.size()/2)); i++)
{
ch = Num.at(i);
Num.at(i) = Num.at( ( Num.size()- 1)-i);
Num.at( ( Num.size()- 1)-i) = ch;
}
}
//
// Sum for heavy number
string sum ( string Num1 , string Num2)
{
int i;
int MaxLen;
int sum=0;
int r=0;
char ch;
string Num3;
Tipper(Num1);
Tipper(Num2);
if(Num1.size() < Num2.size())
{
MaxLen=Num2.size();
}
else
{
MaxLen=Num1.size();
}
for( i=0; i<MaxLen; i++)
{
sum=0;
if( i< int(Num1.size()))
{
sum += Num1.at(i)-48;
}
if( i< int(Num2.size()))
{
sum += Num2.at(i)-48;
}
ch = ( (sum+r) % 10) + 48;
Num3.push_back(ch);
r = (sum+r) / 10;
}
if(r != 0)
{
ch = r + 48;
Num3.push_back(ch);
}
Tipper(Num3);
return Num3;
}
// End of Sum for heavy number
//Multiplication for heavy number
string multiplication ( string Num1 , string Num2)
{
int i;
int j;
int t;
int r = 0;
int mult=0;
char ch;
string Num3;
string Sum = "0";
Tipper(Num1);
Tipper(Num2);
if( Num1.size() > Num1.size())
{
Num1.swap(Num2);
}
for ( i = 0; i < int(Num1.size()); i++)
{
r=0;
for ( t = 0; t < i; t++)
{
Num3.push_back( '0');
}
for ( j = 0; j < int(Num2.size()); j++)
{
mult = ( Num1.at(i)-48) * ( Num2.at(j)-48);
ch = ( ( mult + r) % 10) + 48;
Num3.push_back( ch);
r = ( mult + r) / 10;
}
if( r != 0)
{
ch = r + 48;
Num3.push_back( ch);
}
Tipper(Num3);
Sum = sum( Sum, Num3);
Num3.clear();
}
return Sum;
}
//end Multiplication for heavy number
//Power for heavy number
string power( string Num1, int Num2)
{
int i;
string result = "1";
for( i=0; i<Num2; i++)
{
result = multiplication(result,Num1);
}
return result;
}
//end Power for heavy number
int main()
{
cout<<power("2",1000)<<endl;
getch();
return 0;
}
#include <conio.h>
#include <math.h>
#include <iostream>
#include <string>
using namespace std;
//
void Tipper (string & Num)
{
int i;
char ch;
for( i=0; i< ( int(Num.size()/2)); i++)
{
ch = Num.at(i);
Num.at(i) = Num.at( ( Num.size()- 1)-i);
Num.at( ( Num.size()- 1)-i) = ch;
}
}
//
// Sum for heavy number
string sum ( string Num1 , string Num2)
{
int i;
int MaxLen;
int sum=0;
int r=0;
char ch;
string Num3;
Tipper(Num1);
Tipper(Num2);
if(Num1.size() < Num2.size())
{
MaxLen=Num2.size();
}
else
{
MaxLen=Num1.size();
}
for( i=0; i<MaxLen; i++)
{
sum=0;
if( i< int(Num1.size()))
{
sum += Num1.at(i)-48;
}
if( i< int(Num2.size()))
{
sum += Num2.at(i)-48;
}
ch = ( (sum+r) % 10) + 48;
Num3.push_back(ch);
r = (sum+r) / 10;
}
if(r != 0)
{
ch = r + 48;
Num3.push_back(ch);
}
Tipper(Num3);
return Num3;
}
// End of Sum for heavy number
//Multiplication for heavy number
string multiplication ( string Num1 , string Num2)
{
int i;
int j;
int t;
int r = 0;
int mult=0;
char ch;
string Num3;
string Sum = "0";
Tipper(Num1);
Tipper(Num2);
if( Num1.size() > Num1.size())
{
Num1.swap(Num2);
}
for ( i = 0; i < int(Num1.size()); i++)
{
r=0;
for ( t = 0; t < i; t++)
{
Num3.push_back( '0');
}
for ( j = 0; j < int(Num2.size()); j++)
{
mult = ( Num1.at(i)-48) * ( Num2.at(j)-48);
ch = ( ( mult + r) % 10) + 48;
Num3.push_back( ch);
r = ( mult + r) / 10;
}
if( r != 0)
{
ch = r + 48;
Num3.push_back( ch);
}
Tipper(Num3);
Sum = sum( Sum, Num3);
Num3.clear();
}
return Sum;
}
//end Multiplication for heavy number
//Power for heavy number
string power( string Num1, int Num2)
{
int i;
string result = "1";
for( i=0; i<Num2; i++)
{
result = multiplication(result,Num1);
}
return result;
}
//end Power for heavy number
int main()
{
cout<<power("2",1000)<<endl;
getch();
return 0;
}