大数运算方法的数据过大时,一般的数据类型无法存储。 在这种情况下,使用数组存储数据、模拟手动计算和按位计算的大数运算的专业方法。
例如,1234*4以int序列a存储
步骤1 :将1:1000位分别存入a[0]、a[1]、a[2]、a[3]。 此时,a={4、3、2、1};
第二步:从位数乘以4。 请注意进位运算。
(1)4=16,位6存储在a(0)中,记录进位1。 在这种情况下,a={ 6,3,2,1 };
)2)3 * 4=12,加上进位1为13,1个位3保存在a(1)中,记录进位1。 在这种情况下,a={ 6,3,2,1 };
)3)2 * 4=8,加上进位9,存储在a(2)中。 在这种情况下,a={ 6,3,9,1 };
(4)1 * 4=4,委托给a(3)。 在这种情况下,a={6、3、9、4};
步骤3 :输出,从最后一位开始输出,需要4936。
主题:问题说明
输入正整数n,输出n! 请参阅。
其中n!=123*…*n。
算法说明
n! 虽然可能很大,但计算机可以表示的整数范围有限,需要使用高精度的计算方法。 使用数组a表示大整数a,A[0]表示a的一位,A[1]表示a的十位,按顺序类推。
如果a乘以整数k,则数组a的各个元素乘以k。 请注意适当的进位。
首先a为1,然后乘以2、3,乘n的时候,得到了n! 请参阅。
输入格式
输入正整数n。 n=1000。
输出格式
输出n! 的准确值。
样本输入
10
样本输出
3628800
上码` ` ` CPP # include iostream # include string.husingnamespacestd; int main () {int num; 记录cin num的int a[10010]; 短信(a,0,sizeof(a ) a ); //清零,如果不加入该步骤,输出时错误int carry=0; //进位int s; a[0]=1; //1到num for (inti=2; i=num; I ) for(intj=0; j 10000; j () {s=a[j] * i carry; a[j]=s % 10; 卡莉=s/10; }for(intI=10000; i=0; (I ) ) /反向输出if ) a[I]!=0) while(I=0) ) {cout a[i]; I----; }break; } }返回0; }也可以更改为在一个数组位中存储4、5位或更多位。 少于int限制)