我们首先要明确123*9如何算?
3*9=27,进位2,数值为7
2*9=18,18+进位2=20, 故进位2,数值0
1*9=9,9+2=11,数值11
故答案为1107
主要思想
a*b:
我们将a的各个位数保存在数组中,然后分别乘以b,在加以进位运算即可。
比如123*21,保存到数组中an[1]=3,an[2]=2,an[3]=1,
先从个位开始乘,即an[1]*21=63,进位6,数值3,操作为an[1]=3,
an[2]*21=42,42+进位6=48, 故进位4,数值8,操作为an[2]=8,
an[3]*21=21,21+进位4=25,数值为25,操作为an[3]=5,an[4]=2
故最终为2583
#include<stdio.h>
int main(void)
{
int n;
n=11;
int ans[10000]={0};//答案保存时,位数低的在左边
int size=1;//乘到现在,有几位数
int bit=0;//进位的数
ans[1]=1;
for(int i=2;i<=n;i++)//阶乘到n
{
for(int j=1;j<=size;j++)//每个新数i乘以当前答案 ,乘的顺序 个 十 百
{
int tep=ans[j]*i+bit;
bit=tep/10; //进位的值
ans[j]=tep%10; //要保存的数值
}
while(bit) //更新位数的同时将进位保存
{
ans[++size]=bit%10;
bit/=10;
}
}
for(int i=size;i>=1;i--)//输出
{
printf("%d",ans[i]);
}
printf("\n");
}