URAL - 1153 Supercomputer 大数开方
题意:给定m,m = n * (n+1) / 2,计算n值。
思路:n = SQRT(m*2)
注意m很大,需要自己实现大数开方。我用的是自己写的大数模板:大数模板
AC代码
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <utility>
#include <string>
#include <iostream>
#include <map>
#include <set>
#include <vector>
#include <queue>
#include <stack>
using namespace std;
#define eps 1e-10
#define inf 0x3f3f3f3f
#define PI pair<int, int>
typedef long long LL;
const int maxn = 1e4 + 5;
struct BigInteger {
vector<int>s; //12345--54321
void DealZero() { //处理前导0
for(int i = s.size() - 1; i > 0; --i){
if(s[i] == 0) s.pop_back();
else break;
}
}
BigInteger operator = (long long num) { // 赋值运算符
s.clear();
vector<int>tmp;
do{
s.push_back(num % 10);
num /= 10;
}while(num);
return *this;
}
BigInteger operator = (const string& str) { // 赋值运算符
s.clear();
for(int i = str.size() - 1; i >= 0; --i) s.push_back(str[i] - '0');
this->DealZero();
return *this;
}
BigInteger operator = (const char *a) {
int n = strlen(a);
}
BigInteger operator + (const BigInteger& b) const {
BigInteger c;
c.s.clear();
int len1 = s.size(), len2 = b.s.size();
for(int i = 0, g = 0; g > 0 || i < len1 || i < len2; ++i) {
int x = g;
if(i < len1) x += s[i];
if(i < len2) x += b.s[i];
c.s.push_back(x % 10);
g = x / 10;
}
return c;
}
//大数减小数
BigInteger operator - (const BigInteger& b) const {
BigInteger c;
c.s.clear();
int len1 = s.size(), len2 = b.s.size();
for(int i = 0, g = 0; i < len1 || i < len2; ++i) {
int x = g;
if(i < len1) x += s[i];
g = 0;
if(i < len2) x -= b.s[i];
if(x < 0) {
g = -1; //借位
x += 10;
}
c.s.push_back(x);
}
c.DealZero();
return c;
}
BigInteger operator * (const BigInteger& b) const {
BigInteger c, tmp;
c.s.clear();
int len1 = s.size(), len2 = b.s.size();
for(int i = 0; i < len1; ++i) {
tmp.s.clear();tmp;
int num = i;
while(num--) tmp.s.push_back(0);
int g = 0;
for(int j = 0; j < len2; ++j) {
int x = s[i] * b.s[j] + g;
tmp.s.push_back(x % 10);
g = x / 10;
}
if(g > 0) tmp.s.push_back(g);
c = c + tmp;
}
c.DealZero();
return c;
}
//单精度除法
BigInteger operator / (const int b) const {
BigInteger c, tmp;
c.s.clear();
int len = s.size();
int div = 0;
for(int i = len - 1; i >= 0; --i) {
div = div * 10 + s[i];
while(div < b && i > 0) {
div = div * 10 + s[--i];
}
tmp.s.push_back(div / b);
div %= b;
}
for(int i = tmp.s.size() - 1; i >= 0; --i) c.s.push_back(tmp.s[i]);
c.DealZero();
return c;
}
bool operator < (const BigInteger& b) const {
int len1 = s.size(), len2 = b.s.size();
if(len1 != len2) return len1 < len2;
for(int i = len1 - 1; i >= 0; --i) {
if(s[i] != b.s[i]) return s[i] < b.s[i];
}
return false; //相等
}
bool operator <= (const BigInteger& b) const {
return !(b < *this);
}
string ToStr() {
string ans;
ans.clear();
for(int i = s.size()-1; i >= 0; --i)
ans.push_back(s[i] + '0');
return ans;
}
//大数开方
/**大数开方用法说明:
字符串必须从第二个位置开始输入,且s[0] = '0'
scanf("%s", s+1);
*/
BigInteger SQRT(char *s) {
string p = "";
s[0]='0';
if(strlen(s)%2 == 1)
work(p, 2, s+1, 0);
else
work(p, 2, s, 0);
BigInteger c;
c.s.clear();
c = p;
return c;
}
//开方准备
//------------------------------------
int l;
int work(string &p, int o,char *O,int I){
char c, *D=O ;
if(o>0)
{
for(l=0;D[l];D[l++]-=10)
{
D[l++]-=120;
D[l]-=110;
while(!work(p, 0, O, l))
D[l]+=20;
p += (char)((D[l]+1032)/20);
}
}
else
{
c=o+(D[I]+82)%10-(I>l/2)*(D[I-l+I]+72)/10-9;
D[I]+=I<0 ? 0 : !(o=work(p, c/10,O,I-1))*((c+999)%10-(D[I]+92)%10);
}
return o;
}
//-----------------------------------------
};
ostream& operator << (ostream &out, const BigInteger& x) {
for(int i = x.s.size() - 1; i >= 0; --i)
out << x.s[i];
return out;
}
istream& operator >> (istream &in, BigInteger& x) {
string s;
if(!(in >> s)) return in;
x = s;
return in;
}
int main() {
BigInteger a, tmp;
tmp = 2;
string str;
char s[maxn];
while(cin >> str) {
a = str;
a = tmp * a;
int cur = 1;
for(int i = a.s.size()-1; i >= 0; --i) {
s[cur++] = a.s[i] + '0';
}
cout << a.SQRT(s) << "\n";
}
return 0;
}
如有不当之处欢迎指出!
URAL - 1153 Supercomputer 大数开方的更多相关文章
- ural 1153. Supercomputer
1153. Supercomputer Time limit: 2.0 secondMemory limit: 64 MB To check the speed of JCN Corporation ...
- Java中利用BigInteger类进行大数开方
在Java中有时会用到大数据,基本数据类型的存储范围已经不能满足要求了,如要对10的1000次方的这样一个数据规模的数进行开方运算,很明显不能直接用Math.sqrt()来进行计算,因为已经溢出了. ...
- ACM-ICPC2018焦作网络赛 Participate in E-sports(大数开方)
Participate in E-sports 11.44% 1000ms 65536K Jessie and Justin want to participate in e-sports. E- ...
- 蓝桥杯T126(xjb&大数开方)
题目链接:http://lx.lanqiao.cn/problem.page?gpid=T126 题意:中文题诶- 思路:显然被翻转了奇数次的硬币为反面朝上,但是本题的数据量很大,所以O(n^2)枚举 ...
- JAVA 大数开方模板
JAVA 大数开方模板 import java.math.BigInteger; import java.math.*; import java.math.BigInteger; import jav ...
- 大数开方 ACM-ICPC 2018 焦作赛区网络预赛 J. Participate in E-sports
Jessie and Justin want to participate in e-sports. E-sports contain many games, but they don't know ...
- ACM-ICPC 2018 焦作赛区网络预赛 J Participate in E-sports(大数开方)
https://nanti.jisuanke.com/t/31719 题意 让你分别判断n或(n-1)*n/2是否是完全平方数 分析 二分高精度开根裸题呀.经典题:bzoj1213 用java套个板子 ...
- Very simple problem - SGU 111(大数开方)
分析:使用的是构造新数字法进行不断构造,然后逼近每一位数字,然后使用c++徒手敲了240多行代码,竟然过了........................很有成就感. 代码如下: ========== ...
- 大数模板(Java)
大数加法 /* 给出2个大整数A,B,计算A+B的结果. Input 第1行:大数A 第2行:大数B (A,B的长度 <= 10000 需注意:A B有可能为负数) Output 输出A + B ...
随机推荐
- 11_什么是sql注入?
什么是sql注入? --因为后台会把用户输入的插入到后台的sql语句中,来进行sql查询判断用户输入是否存在数据库中, 来验证用户是否合法,就会出现一个问题,用户在做用户验证的时候,在输入框注 ...
- Windows核心编程&作业
1. 作业内核对象 允许将进程组合在一起并创建一个"沙箱"来限制进程能够做什么.我们可以将作业内核对象想象成一个进程容器(即使只有一个进程也具有相当的重要性) 限制包括可以分配的最 ...
- jquery判断数据类型和相同字符串不相等
typeof object返回object对象数据类型 encodeURIComponent(str)//可把字符串作为URI 组件进行编码. 若str1和str2字符串数值相同,encodeURIC ...
- Linux指令--diff
diff 命令是 linux上非常重要的工具,用于比较文件的内容,特别是比较两个版本不同的文件以找到改动的地方.diff在命令行中打印每一个行的改动.最新版本的diff还支持二进制文件.diff程序的 ...
- 【总目录】——概率论与数理统计及Python实现
注:这是一个横跨数年的任务,标题也可以叫做“从To Do List上划掉学习统计学”.在几年前为p值而苦恼的时候,还不知道Python是什么:后来接触过Python,就喜欢上了这门语言.统计作为数据科 ...
- ATS 分级缓存
理解缓存分级cache hierarchies 缓存分级是由彼此能够相互通信的各级缓存组成的,ATS支持几种类型的缓存分级.所有的缓存分级都有父子缓存概念. 父缓存位于缓存分级的较高级别,ATS能将请 ...
- [ASP.NET][Session] 使用 SQLServer 会话管理解决 Session 丢失问题
使用 SQLServer 会话管理解决 Session 丢失问题 步骤 1.通过命令行执行 aspnet_regsql.exe 程序(不要双击安装),先在 CMD 中输入命令 cd C:\Window ...
- yii 缓存之apc
首先yii CApcCache 实现了一个针对APC的缓存应用组件,常见的缓存操作方法get,set,add,delete,flush... 下面说说配置: 1. 在config/main.php c ...
- Objective-C Runtime 文档翻译
前言 Objective-C语言尽可能多的将许多决定从编译连接推迟到运行时.无论何时,它都尽可能的动态处理事件.这就意味着OC语言不仅仅需要编译器,还需要一个运行时系统来执行编译完成的代码.对于O ...
- log4j源码解析-文件解析
承接前文log4j源码解析,前文主要介绍了log4j的文件加载方式以及Logger对象创建.本文将在此基础上具体看下log4j是如何解析文件并输出我们所常见的日志格式 附例 文件的加载方式,我们就选举 ...