- 思路:把握三个数字,构造一个函数,返回值是下一个平方的数字(m),然后更新a(k:全局变量)与a+2*x(t:全局变量,!!!但是但是,为了最后的输出方便,t就接收较大的值,也就是说t可等于更新后的a,例如:48 ,k = 46,,t = 50,看代码吧,这里说的不好),这里我们用括号里面的数字简略代替,什么意思呢?我们用939来举例
- 经过一次函数调用之后,k = 900,t = 978,m = 39(待平方的数字);
- 所有的乘积小的数一定写在大的数前面
- 这题用long long,数据挺大的;
- 可以算一下,n - k = t - n
#include <bits/stdc++.h>
using namespace std;
#define ll long long
ll k, t, n;
ll getPF(ll n) {
ll cnt = 0;
ll p1 = n;
while (p1 >=10) {
p1 /= 10;
cnt++;
}
ll p2 = p1 + 1;
while (cnt--) {
p1 *= 10;
p2 *= 10;
}
if (n - p1 > p2 - n) {
t = p2;
k = 2 * n - t;
return p2 - n;
}
else {
k = p1;
t = 2 * n - k;
return n - p1;
}
}
string intToString(ll g) {
string res = "";
while (g){
res = char (g % 10 + '0') + res;
g /= 10;
}
return res;
}
int main () {
cin >> n;
string tmp = "=";
while (n > 0) {
cout << n << "^2" << endl;
n = getPF(n);
tmp += intToString(k) + "*" + intToString(t);
if (n) tmp += "+";
cout << tmp;
}
return 0;
}
|