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 ...
随机推荐
- Windows核心编程&内核对象
1. 一个进程在初始化时,系统将会他分配一个空的句柄表,这个句柄表仅供内核对象使用,不供用户对象和GDI对象使用.进程在首次 初始化时,该句柄表为空.句柄表是一个由数据结构组成的数组,包含一个内核对象 ...
- python初识 - day4
一.集合(set) 1.集合的定义 set 是一个无序的元素集合,支持并.交.差及对称差等数学运算, 但由于 set 不记录元素位置, 因此不支持索引.分片等类序列的操作. 2.集合的创建 大括号或 ...
- JAVA中科学计数法转换普通计数法
今天发现数据库里汇总的数据有点大,一输出就被自动转化成科学计数法了.后来发现是转换字符串的方法有问题.如下: String a = "11234567.89"; BigDecima ...
- PHP中变量的销毁
PHP的变量或对象的销毁可以分成显式销毁和隐式销毁: 1.显式销毁,当对象没有被引用时就会被销毁,所以我们可以unset或为其赋值NULL; 2.隐式销毁,PHP是脚本语言,在代码执行完最后一行时,所 ...
- 端口扫描命令nmap
转:http://www.osyunwei.com/archives/2004.html 下面教大家在CentOS中用nmap查看主机端口: 一.安装nmap yum install nmap -y ...
- AutoCAD开发选择----ObjectARX还是.net API(转载)
本文基于AutoCAD 2006新推出的.NET API为工具,介绍了在.NET平台下对AutoCAD进行二次开发的技术,并与目前常用的VBA.ObjectARX作了对比.同时讨论了如何弥补.NET ...
- 【转】GPS基线的精化处理
影响基线解算结果的因素主要有: (1)基线解算时所设定的起点坐标不准确. 起点坐标不准确,会导致基线出现尺度和方向上的偏差,造成的影响目前还没有较容易的方法来加以判别,因此,在实际工作中,只有尽量提高 ...
- 珍爱生命,远离JS=>JS避坑记
JavaScript避坑记 转载请注明源地址: http://www.cnblogs.com/funnyzpc/p/8407952.html 上图=> 有意思的漫画,不知大家看懂了没,这里我想说 ...
- 字段的参数 -- Django从入门到精通系列教程
该系列教程系个人原创,并完整发布在个人官网刘江的博客和教程 所有转载本文者,需在顶部显著位置注明原作者及www.liujiangblog.com官网地址. Python及Django学习QQ群:453 ...
- 在Web.config中配置handler
在Web.config中配置handler节点时发现用vs2010和用vs2015竟然不一样,经过多次测试发现了一些倪端: <configuration> <!--vs2010中需要 ...