当前位置:网站首页>Haut OJ 1245: large factorial of CDs --- high precision factorial
Haut OJ 1245: large factorial of CDs --- high precision factorial
2022-07-05 05:17:00 【hunziHang】
Problem description :
cds: I heard that you can already use C Language seeking n! 了
ykc: Of course ! Light yard oj I have already solved all the factorial problems AC 了 , for example 1048 Factorial table ,1050 The cumulative sum of factorials ,1089 The highest position of factorial, etc ……
cds: Oh ? Really? , Then I'll give you a number n, Can you find its factorial immediately ?
ykc: good , That's all right. !
cds: can n Very big
ykc: Don't worry , I use long long Just fine
cds: Good. ,n=80
ykc:&#¥%#woc
Input :
Single instance test , Enter a natural number n(n<=2000)
Output :
Output n The factorial
The sample input :
80
Sample output :
71569457046263802294811533723186532165584657342365752577109445058227039255480148842668944867280814080000000000000000000
Cause analysis :
1. utilize i To achieve 1 To n The factorial ,temp Record the number obtained by multiplying each time ,digit Record the number of digits ( So that each number can be multiplied )
2. temp=a[j]*i+num; num It is a number on a bit that multiplies and advances backward (num=temp/10;) The number on the bit that should be carried * i after , Need to add low and progressive num.
3. hold num/10 such as 4 The factorial And finally 4*(2*3), namely 24, here num=2 Save to digit That is to say 1 Location
Build another while Yes, it will appear later num There are several , So use a cycle to save each .
Solution :
#include <stdio.h>
int main()
{
int a[20001];// Store the number obtained by each bit
int temp,digit,n,i,j=0;//temp The number of each time digit The number of digits each time
scanf("%d",&n);
a[0]=1;// from 1 Start to multiply
digit=1;// The number of digits starts from the first
for(i=2;i<=n;i++)
{
int num=0;
for(j=0;j<digit;j++) //for Purpose : Multiply each digit of a number by i,
{
temp=a[j]*i+num;
a[j]=temp%10; // Each digit of a number is stored in an array
num=temp/10;
}
while(num)
{
a[digit]=num%10; // Continue to store the number after the last carry
// The previous carry is in the second for Stored in
num=num/10;
digit++;
}
}
for(i=digit-1;i>=0;i--)// Output each bit in reverse order
printf("%d",a[i]);
printf("\n");
return 0;
}
Multi instance input :
#include<bits/stdc++.h>
using namespace std;
#define ll long long
int main()
{
ll i,j,n;
while(cin>>n)
{
ll digit=1,a[100000]; //a Array ,a[0]=1,digit Need to put it in .
a[0]=1;
for(j=2;j<=n;j++)
{
ll num=0,temp;
for(i=0;i<digit;i++)
{
temp=a[i]*j+num;
a[i]=temp%10;
num=temp/10;
}
while(num)
{
a[digit]=num%10;
num/=10;
digit++;
}
}
for(i=digit-1;i>=0;i--)
printf("%d",a[i]);
printf("\n");
}
}
边栏推荐
猜你喜欢

Merge sort

Do a small pressure test with JMeter tool

Unity3d learning notes
![[trans]: spécification osgi](/img/54/d73a8d3e375dfe430c2eca39617b9c.png)
[trans]: spécification osgi

Unity find the coordinates of a point on the circle

嵌入式数据库开发编程(五)——DQL

Applet Live + e - commerce, si vous voulez être un nouveau e - commerce de détail, utilisez - le!

Unity get component

Unity parallax infinite scrolling background
![[interval problem] 435 Non overlapping interval](/img/a3/2911ee72635b93b6430c2efd05ec9a.jpg)
[interval problem] 435 Non overlapping interval
随机推荐
Out and ref functions of unity
Solon Logging 插件的添加器级别控制和日志器的级别控制
[sum of two numbers] 169 sum of two numbers II - enter an ordered array
Ue4/ue5 illusory engine, material chapter, texture, compression and memory compression and memory
Panel panel of UI
Unity parallax infinite scrolling background
cocos_ Lua loads the file generated by bmfont fnt
xftp7与xshell7下载(官网)
用 Jmeter 工具做个小型压力测试
[turn to] MySQL operation practice (III): table connection
Vs2015 secret key
Unity enables mobile phone vibration
Cocos2dx screen adaptation
UE fantasy engine, project structure
Web APIs DOM节点
GameObject class and transform class of unity
[转]MySQL操作实战(一):关键字 & 函数
Heap sort summary
Shell Sort
Under the national teacher qualification certificate in the first half of 2022