7-55 数列求和-加强版 (20分)
程序员文章站
2022-03-13 13:41:17
...
简单版:7-9 特殊a串数列求和
与该题差别:该题非负整数N,简单版是正整数,该题是0-100000,简单版是0-9
知识点
N(0≤N≤100000)
结果是会大于int类型的
因为要防止数据溢出,所以都要要用数组来保存数字的位数。
方法一(数组)
b+=a*(n-i); 目前对这个公式很模糊
#include<bits/stdc++.h>
using namespace std;
//把个十百千...依次为s[0]s[1]s[2]
int main(){
int a,n;cin>>a>>n; //1 3
long long b=0;
vector<int> s;
if(0==n)cout<<"0"; //一个判断点
for(int i=0;i<n;i++){
b+=a*(n-i); // 1*(3-0)=3; 1*(3-1)=2 ; 1*(3-2)=1;
s.push_back(b%10); //3 2 1
b/=10; //b=0 0 0
}
while(b!=0)//不要遗失最高位
{
s.push_back(b%10);
b/=10;
}
for(int i=s.size()-1;i>=0;i--){
cout<<s[i];
}
return 0;
}
方法二(字符串)
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main() {
ll a,n,f=0;
string s;
cin>>a>>n;
if(n==0)
s="0";
for(int i=n;i>=1;i--){
ll t=a*i+f;
s+=(t%10)+'0';
f=t/10;
}
while(f){
s+=(f%10)+'0';
f/=10;
}
for(int i=s.size()-1;i>=0;i--){
putchar(s[i]);
}
return 0;
}
上一篇: AABB外接盒碰撞检测
下一篇: 矩形和圆碰撞_方法