题解 - Wqh R13 - B
wenqinghua1001 · · 题解
命题1
证明 用数学归纳法。
当
假设当
即
即
使用二次方程求根公式得
因为
所以
只能
即当
由数学归纳法可得命题正确。
由命题1,题意转化为计算
由于
10 分做法
#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 分做法
高精度。
#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;
}