大数据最全【c++百日刷题计划】 —(3)

}

int main()
{
int begin,end;
cin>>begin>>end;
int cnt=0;
for(int i=begin;i<=end;i++)
{
if(year(i))
{
ans[cnt++] = i;
}
}
cout<<cnt<<endl;
for(int i=0;i<cnt;i++)
{
cout<<ans[i]<< " ";
}
return 0;
}


## 第二题 A+B Problem(高精)


### 题目描述


高精度加法,相当于 a+b problem,**不用考虑负数**。


### 输入格式


分两行输入。 
 
 
 
 
 a 
 
 
 , 
 
 
 b 
 
 
 ≤ 
 
 
 1 
 
 
 
 0 
 
 
 500 
 
 
 
 
 a,b \leq 10^{500} 
 
 
 a,b≤10500。


### 输出格式


输出只有一行,代表  
 
 
 
 
 a 
 
 
 + 
 
 
 b 
 
 
 
 a+b 
 
 
 a+b 的值。


### 样例 #1


#### 样例输入 #1



1
1


#### 样例输出 #1



2


### 样例 #2


#### 样例输入 #2



1001
9099


#### 样例输出 #2



10100


### 解题思路



> 
> * 1)注意数据范围,不能用简单的加法,要使用高精度算法。
> * 2)用数组分别存储高精度数的每一位,计算同一位的结果。
> * 3)或结果大于10,向前一项进一,若结果小于10,保持不变。
> * 4)继续计算下一位,直到运算结束.
> 
> 
> 


### 参考代码



#include<bits/stdc++.h>
using namespace std;
int a[250],b[250];
int main()
{
string str1,str2;
int len1,len2,len;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
cin>>str1>>str2;
len1=str1.size();
len2=str2.size();
for(int i=0;i<=len1;i++)
{
a[i]=str1[len1-i]-‘0’;
}
for(int i=0;i<=len2;i++)
{
b[i]=str2[len2-i]-‘0’;
}
len=max(len1,len2);
for(int i=1;i<=len;i++)
{
a[i]+=b[i];
a[i+1]+=a[i]/10;
a[i]%=10;
}
len++;
while((a[len]==0)&&(len>1)) len–;
for(int i=len;i>=1;i–)
cout<<a[i];
return 0;
}


## 第三题 A\*B Problem


### 题目描述


给出两个非负整数,求它们的乘积。


### 输入格式


输入共两行,每行一个非负整数。


### 输出格式


输出一个非负整数表示乘积。


### 样例 #1


#### 样例输入 #1



1
2


#### 样例输出 #1



2


### 提示


每个非负整数不超过  
 
 
 
 
 1 
 
 
 
 0 
 
 
 2000 
 
 
 
 
 10^{2000} 
 
 
 102000。


### 解题思路



> 
> * 1)注意数据范围,不能用简单的乘法,要使用高精度算法。
> * 2)用数组分别存储高精度数的每一位,计算同一位的结果。
> * 3)或结果大于10,向前一项进一,若结果小于10,保持不变。
> * 4)继续计算下一位,直到运算结束.
> 
> 
> 


### 参考代码



#include<bits/stdc++.h>
using namespace std;
int a[50001],b[50001],c[50001];
int main()
{
string str1,str2;
int len1,len2,len;
cin>>str1>>str2;
len1=str1.size();
len2=str2.size();
for(int i=0;i<=len1;i++)
{
a[i]=str1[len1-i]-‘0’;
}
for(int i=0;i<=len2;i++)
{
b[i]=str2[len2-i]-‘0’;
}
for(int i=1;i<=len1;i++)
{
for(int j=1;j<=len2;j++)
{
c[i+j-1]+=a[i]*b[j];
c[i+j]+=c[i+j-1]/10;
c[i+j-1]%=10;
}
}
len=len1+len2+1;
while((c[len]==0)&&(len>1)) len–;
for(int i=len;i>=1;i–)
cout<<c[i];
return 0;
}


## 第四题 [NOIP1998 普及组] 阶乘之和


### 题目描述


用高精度计算出  
 
 
 
 
 S 
 
 
 = 
 
 
 1 
 
 
 ! 
 
 
 + 
 
 
 2 
 
 
 ! 
 
 
 + 
 
 
 3 
 
 
 ! 
 
 
 + 
 
 
 ⋯ 
 
 
 + 
 
 
 n 
 
 
 ! 
 
 
 
 S = 1! + 2! + 3! + \cdots + n! 
 
 
 S=1!+2!+3!+⋯+n!( 
 
 
 
 
 n 
 
 
 ≤ 
 
 
 50 
 
 
 
 n \le 50 
 
 
 n≤50)。


其中 `!` 表示阶乘,定义为  
 
 
 
 
 n 
 
 
 ! 
 
 
 = 
 
 
 n 
 
 
 × 
 
 
 ( 
 
 
 n 
 
 
 − 
 
 
 1 
 
 
 ) 
 
 
 × 
 
 
 ( 
 
 
 n 
 
 
 − 
 
 
 2 
 
 
 ) 
 
 
 × 
 
 
 ⋯ 
 
 
 × 
 
 
 1 
 
 
 
 n!=n\times (n-1)\times (n-2)\times \cdots \times 1 
 
 
 n!=n×(n−1)×(n−2)×⋯×1。例如, 
 
 
 
 
 5 
 
 
 ! 
 
 
 = 
 
 
 5 
 
 
 × 
 
 
 4 
 
 
 × 
 
 
 3 
 
 
 × 
 
 
 2 
 
 
 × 
 
 
 1 
 
 
 = 
 
 
 120 
 
 
 
 5! = 5 \times 4 \times 3 \times 2 \times 1=120 
 
 
 5!=5×4×3×2×1=120。


### 输入格式


一个正整数  
 
 
 
 
 n 
 
 
 
 n 
 
 
 n。


### 输出格式


一个正整数  
 
 
 
 
 S 
 
 
 
 S 
 
 
 S,表示计算结果。


### 样例 #1


![img](https://img-blog.csdnimg.cn/img_convert/7c12e4d6dae71afb3db50a0457a3889a.png)
![img](https://img-blog.csdnimg.cn/img_convert/dfcb6cc4cd5b78bd045e3dc64c4f314a.png)

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618545628)**


**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

 
 
 5! = 5 \times 4 \times 3 \times 2 \times 1=120 
 
 
 5!=5×4×3×2×1=120。


### 输入格式


一个正整数  
 
 
 
 
 n 
 
 
 
 n 
 
 
 n。


### 输出格式


一个正整数  
 
 
 
 
 S 
 
 
 
 S 
 
 
 S,表示计算结果。


### 样例 #1


[外链图片转存中...(img-Y4dp4B5J-1714770879794)]
[外链图片转存中...(img-Kpc8zCMv-1714770879794)]

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618545628)**


**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值