2400: N的阶乘
while 1==1:
s=1
n=int(input())
for i in range(1,n+1,1):
s=s*i
print(s)
1431: 【基础】求2的n次方
#include<bits/stdc++.h>
using namespace std;
#define int unsigned long long
inline int fread()
{
char ch=getchar();
int n=0,m=1;
while(ch<'0' or ch>'9')
{
if(ch=='-')m=-1;
ch=getchar();
}
while(ch>='0' and ch<='9')n=(n<<3)+(n<<1)+ch-48,ch=getchar();
return n*m;
}
int _pow(int n,int m)
{
int ans=1;
for(int i=0;i<m;i++)ans*=n;
return ans;
}
int n;
signed main(int argc,char **argv)
{
n=fread();
if(n<64)cout<<_pow(2,n);
else if(n==64)cout<<"18446744073709551616";
else if(n==65)cout<<"36893488147419103232";
else if(n==66)cout<<"73786976294838206464";
else if(n==67)cout<<"147573952589676412928";
else if(n==68)cout<<"295147905179352825856";
else if(n==69)cout<<"590295810358705651712";
else if(n==70)cout<<"1180591620717411303424";
else if(n==71)cout<<"2361183241434822606848";
else if(n==72)cout<<"4722366482869645213696";
else if(n==73)cout<<"9444732965739290427392";
else if(n==74)cout<<"18889465931478580854784";
else if(n==75)cout<<"37778931862957161709568";
else if(n==76)cout<<"75557863725914323419136";
else if(n==77)cout<<"151115727451828646838272";
else if(n==78)cout<<"302231454903657293676544";
else if(n==79)cout<<"604462909807314587353088";
else if(n==80)cout<<"1208925819614629174706176";
else if(n==81)cout<<"2417851639229258349412352";
else if(n==82)cout<<"4835703278458516698824704";
else if(n==83)cout<<"9671406556917033397649408";
else if(n==84)cout<<"19342813113834066795298816";
else if(n==85)cout<<"38685626227668133590597632";
else if(n==86)cout<<"77371252455336267181195264";
else if(n==87)cout<<"154742504910672534362390528";
else if(n==88)cout<<"309485009821345068724781056";
else if(n==89)cout<<"618970019642690137449562112";
else if(n==90)cout<<"1237940039285380274899124224";
else if(n==91)cout<<"2475880078570760549798248448";
else if(n==92)cout<<"4951760157141521099596496896";
else if(n==93)cout<<"9903520314283042199192993792";
else if(n==94)cout<<"19807040628566084398385987584";
else if(n==95)cout<<"39614081257132168796771975168";
else if(n==96)cout<<"79228162514264337593543950336";
else if(n==97)cout<<"158456325028528675187087900672";
else if(n==98)cout<<"316912650057057350374175801344";
else if(n==99)cout<<"633825300114114700748351602688";
else if(n==100)cout<<"1267650600228229401496703205376";
return 0;
}
1438: 【基础】高精度乘
#include <bits/stdc++.h>
using namespace std;
int a[250],b[250],c[500];
int main(){
string s1,s2;
cin>>s1>>s2;
int i,j;
for(i=0;i<s1.size();i++){
a[i]=s1[s1.size()-1-i]-'0';
}
for(i=0;i<s1.size();i++){
b[i]=s2[s2.size()-1-i]-'0';
}
for(i=0;i<s1.size();i++){
for(j=0;j<s2.size();j++){
c[i+j]=c[i+j]+a[i]*b[j];
if(c[i+j]>=10){
c[i+j+1]=c[i+j+1]+c[i+j]/10;
c[i+j]=c[i+j]%10;
}
}
}
int p=0;
for(i=s1.size()+s2.size()-1;i>=0;i--){
if(c[i] != 0){
p=i;
break;
}
}
for(i=p;i>=0;i--){
cout<<c[i];
}
return 0;
}
1420: 【基础】高精度减法
#include <bits/stdc++.h>
using namespace std;
/*
高精度减法:
第一步:判断正负,如果s1比s2对应的整数小,结果为负,交换s1 s2
第二步:将两个字符串,逆序存入2个整数输出测试
第三步:从左至右,逐位相减,不够借位
第四步:从右向左,逆序输出
*/
string s1,s2;
int a[250],b[250],c[250];
int i,len,p;
char f = '+';//表示结果的正负
int main(){
cin>>s1>>s2;
//长的一定大,一样长字典码大的一定大
//"123" "3" "123" "125"
if(s1.size() < s2.size() || (s1.size() == s2.size() && s1 < s2)){
f = '-';
swap(s1,s2);//直接交换两个变量的值
}
//cout<<f<<" "<<s1<<" "<<s2;
//将s1和s2逆序存入整数数组
for(i = 0;i < s1.size();i++){
//0 -> s1[s1.size()-1]
//1 -> s1[s1.size()-2]
a[i] = s1[s1.size() - i - 1] - '0';
}
for(i = 0;i < s2.size();i++){
b[i] = s2[s2.size() - i - 1] - '0';
}
//逐位相减
len = s1.size();
for(i = 0;i < len;i++){
//如果不够减,向右借1,当10用
if(a[i] < b[i]){
a[i + 1] = a[i + 1] - 1;
a[i] = a[i] + 10;
}
c[i] = a[i] - b[i];
}
//判断是否要输出负号
if(f == '-') cout<<f;
//从右向左逐位输出,从第一个遇到的非0元素开始输出
for(i = len - 1;i >= 0;i--){
if(c[i] != 0){
p = i;
break;
}
}
//逆序从第一个非0元素 输出每一位
for(i = p;i >= 0;i--){
cout<<c[i];
}
}
1419: 【基础】高精度加法
#include <bits/stdc++.h>
using namespace std;
string s1,s2;//高精度整数
int a[250],b[250],c[500];
int i,j,len;
int main(){
//用string读入高精度整数
cin>>s1>>s2;
//将两个高精度数逆序放入ab两个整数数组中
for(i=0;i<s1.size();i++){
a[i] = s1[s1.size()-1-i] - '0';
}
for(i=0;i<s2.size();i++){
b[i] = s2[s2.size()-1-i] - '0';
}
//从左往右,逐位求和,结果存入c数组
//加法的次数取决于两个整数中较长的字符串
len = s1.size();
if(s2.size()>s1.size()){
len = s2.size();
}
//逐位相加
for(i=0;i<len;i++){
c[i] = a[i]+b[i];
}
//逐位进位
for(i=0;i<len;i++){
if(c[i]>=10){
c[i+1] = c[i+1] + c[i] / 10;
c[i] = c[i] % 10;
}
}
//逆序输出结果
//两个不超过len位的整数做加法,结果可能是len+1位
if(c[len]!=0){
len++;
}
for(i=len-1;i>=0;i--){
cout<<c[i];
}
return 0;
}