专栏文章
题解 - Wqh R13 - B
P1000题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mink4e2u
- 此快照首次捕获于
- 2025/12/02 03:43 3 个月前
- 此快照最后确认于
- 2025/12/02 03:43 3 个月前
命题1 。
证明 用数学归纳法。
当 时显然成立。
假设当 时命题成立,则当 时
即
即
使用二次方程求根公式得
因为 ,
所以 不成立,
只能 。
即当 时命题也成立。
由数学归纳法可得命题正确。
由命题1,题意转化为计算 的值。
由于 的值有点大,使用高精度乘法通过此题。
10 分做法
CPP#include<bits/stdc++.h>
#define int long long
// 不开 long long 也 10 分。
using namespace std;
signed main(){
int n;
cin>>n;
cout<<n*n;
return 0;
}
100 分做法
高精度。
CPP#include<bits/stdc++.h>
using namespace std;
struct bint{
int d,a[100010];
};
void input(bint& x){
int t[100010],n=0;
char c;
while ((c=getchar())&&('0'<=c)&&(c<='9'))t[++n]=c-'0';
for (int i=1;i<=n;i++){
x.a[i]=t[n+1-i];
}
x.d=n;
}
void output(bint& x){
for (int i=x.d;i>=1;i--){
cout<<x.a[i];
}
cout<<endl;
}
bint mul(bint& x,bint& y){
bint res;
for (int i=1;i<=x.d;i++){
for (int j=1;j<=y.d;j++){
res.a[i+j-1]+=x.a[i]*y.a[j];
while (res.a[i+j-1]>=10){
res.a[i+j-1]-=10;
res.a[i+j]++;
}
}
}
if ((x.d==1&&x.a[1]==0)||(y.d==1&&y.a[1]==0))res.d=1;
else if (res.a[x.d+y.d]==0)res.d=x.d+y.d-1;
else res.d=x.d+y.d;
return res;
}
int main(){
bint a,b,c;
input(a);
b=a;
c=mul(a,b);
output(c);
return 0;
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...