c语言中数组大小10000,C语言,怎么存一个很大的数,比方说10000的阶乘
C語言,如何存一個很大的數,比方說10000的階乘
我們使用最大的long?double?來定義,可是還是撐不下這么大的數,那么該怎么做?
long?double?sum?=?1;
int?i?=?1;
for?(i;?i?
{
sum?=?sum?*?(double)i;
}
cout<
------解決思路----------------------
采用數組來表示
------解決思路----------------------
僅供參考:#include?
#include?
#include?
using?namespace?std;
int?COMPARE(string?number1,?string?number2)?{
int?i,j;
int?length1?=?number1.size();
int?length2?=?number2.size();
if(number1.size()?==?0)?number1?=?"0";
if(number2.size()?==?0)?number2?=?"0";
j?=?0;
for(i?=?0;?i?
if(number1[i]?==?'0')?++j;
else?break;
}
number1?=?number1.substr(j);
j?=?0;
for(i?=?0;?i?
if(number2[i]?==?'0')?++j;
else?break;
}
number2?=?number2.substr(j);
length1?=?number1.size();
length2?=?number2.size();
if(length1?>?length2)?{
return?1;
}?else?if(length1?==?length2)?{
if(number1.compare(number2)?>?0)?{
return?1;
}?else?if(number1.compare(number2)?==?0)?{
return?0;
}?else?{
return?-1;
}
}?else?{
return?-1;
}
return?0;
}
string?PLUS(string?number1,string?number2)?{
int?i;
int?length1?=?number1.size();
int?length2?=?number2.size();
string?result="";
reverse(number1.begin(),?number1.end());
reverse(number2.begin(),?number2.end());
for(i?=?0;?i?
char?c?=?(char)(number1[i]?+?number2[i]?-?48);
result?=?result?+?c;
}
while(i?
result?=?result?+?number1[i];
++i;
}
while(i?
result?=?result?+?number2[i];
++i;
}
int?carry?=?0;
for(i?=?0;?i?
int?value?=?result[i]?-?48?+?carry;
result[i]?=?(char)(value?%?10?+?48);
carry?=?value?/?10;
}
if(carry?!=0?)?{
result?=?result?+?(char)(carry?+?48);
}
for(i?=?result.size()?-?1;?i?>=?0;?i--)?{
if(result[i]?!=?'0')?break;
}
result?=?result.substr(0,?i?+?1);
reverse(result.begin(),?result.end());
if(result.length()?==?0)?result?=?"0";
return?result;
}
string?MINUS(string?number1,string?number2)?{
int?i;
string?result?=?"";
int?length1?=?number1.size();
int?length2?=?number2.size();
if(COMPARE(number2,number1)?>?0)?{
return?"-"?+?MINUS(number2,?number1);
}
reverse(number1.begin(),number1.end());
reverse(number2.begin(),number2.end());
for(i?=?0;?i?
char?c?=?number1[i]?-?number2[i]?+?48;
result?=?result?+?c;
}
if(i?
for(;?i?
result?=?result?+?number1[i];
}
}
int?carry?=?0;
for(i?=?0;?i?
int?value?=?result[i]?-?48?+?carry;
if(value?
value?=?value?+?10;
carry?=?-1;
}?else?carry?=?0;
result[i]=(char)(value?+?48);
}
for(i?=?result.size()?-?1;?i?>=?0;?i--)?{
if(result[i]?!=?'0')break;
}
result?=?result.substr(0,?i+1);
reverse(result.begin(),?result.end());
if(result.length()==0)?result?=?"0";
return?result;
}
string?MULTIPLY(string?number1,?string?number2)?{
int?i,?j;
int?*iresult;
int?length1?=?number1.size();
int?length2?=?number2.size();
string?result?=?"";
reverse(number1.begin(),?number1.end());
reverse(number2.begin(),?number2.end());
iresult?=?(int*)malloc(sizeof(int)?*?(length1?+?length2?+?1));
memset(iresult,?0,?sizeof(int)?*?(length1?+?length2?+?1));
for(i?=?0;?i?
for(j?=?0;?j?
iresult[i+j]?+=?((number1[i]?-?48)?*?(number2[j]?-?48));
}
}
int?carry?=?0;
for(i?=?0;?i?
int?value?=?iresult[i]?+?carry;
iresult[i]?=?value?%?10;
carry?=?value?/?10;
}
for(i?=?length1?+?length2?-?1;?i?>=?0;?i--)?{
if(iresult[i]?!=?0)break;
}
for(;?i?>=?0;?i--)?{
result?=?result?+?(char)(iresult[i]+48);
}
free(iresult);
if(result?==?"")?result?=?"0";
return?result;
}
string?factorial(string?n)?{
string?temp?=?"1";
string?i;
for(i?=?"1";?COMPARE(i,?n)?<=?0;?i?=?PLUS(i,?"1"))?{
temp?=?MULTIPLY(temp,?i);
}
return?temp;
}
int?main(void)?{
cout?<
return?0;
}
------解決思路----------------------
弄個數組??然后針對這個數組寫幾個加減乘除的函數
------解決思路----------------------
四行代碼算1000階乘精確值
------解決思路----------------------
用數組,自己寫計算函數
總結
以上是生活随笔為你收集整理的c语言中数组大小10000,C语言,怎么存一个很大的数,比方说10000的阶乘的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 南方电网上市公司股票
- 下一篇: c语言最佳适应算法实验报告,操作系统实验