大整數開根 codevs3119

2021-07-29 10:54:01 字數 1955 閱讀 9288

給出乙個正整數n,求n開根號後的整數部分的值。n的位數不超過1000位

我果然還是好弱啊

二分乙個答案然後高精度乘法判斷,然後我壓位都打錯乙個晚上就過去了。。

這次的程式應該能當高精度的標了吧

#include 

#include

#define rep(i, st, ed) for (int i = st; i <= ed; i += 1)

#define drp(i, st, ed) for (int i = st; i >= ed; i -= 1)

#define fill(x, t) memset(x, t, sizeof(x))

#define max(x, y) ((x)>(y)?(x):(y))

#define l 1001

#define mod 1000

struct numelse

}return

1; }

}inline

bool

operator

<(num b)else

if (a.len > b.len)elseelse

if (a.s[i] > b.s[i])

}return

0; }

}inline

bool

operator

<=(num b)else

}inline

bool

operator >(num b)else

if (a.len < b.len)elseelse

if (a.s[i] < b.s[i])

}return

0; }

}inline

bool

operator >=(num b)else

}inline num operator +(num b), max(a.len, b.len)};

int v = 0;

rep(i, 1, c.len)

if (v)

return c;

}inline num operator -(num b), max(a.len, b.len)};

rep(i, 1, c.len)

}while (!c.s[c.len] && c.len > 1)

return c;

}inline num operator *(num b), a.len + b.len};

rep(i, 1, a.len)

}rep(i, 1, a.len + b.len)

while (!c.s[c.len] && c.len > 1)

return c;

}inline num operator /(int b), a.len};

int v = 0;

drp(i, len, 1)

while (!c.s[c.len] && c.len > 1)

return c;

}inline

void read()

s[++ len] = v;

v = 0;

}rep(j, 0, i)

s[++ len] = v;

}inline

void read1(int x)while (x /= mod);

}inline

void output()

printf("%d", tmp.s[i]);

drp(j, i - 1, 1);

rep(k, 1, 3)

drp(k, 3, 1)

}printf("\n");

}};num one;

int main(void)else

if (qr > p)

}ans.output();

return

0;}

高精度 大整數開根

二分法 include include include using namespace std int n,nlen char str 22 int c 1000 int a 1000 b 1000 d 1000 int isok int len for i 0 ifor j 0 j2 len 1 ...

codevs 1487 大批整數排序

codevs開發者有話說 codevs自從換了評測機,新評測機的記憶體計算機制發生變化 計算記憶體的時候會包括棧空間 swap空間 這題的2m是單指記憶體空間。十分十分抱歉 抱歉現在有一大批 總數不超過10000000個 1到10之間的整數,現在請你從小到大進行排序輸出。測試資料將超過11mb。輸入...

求(3 開根5) N次方的整數部分最後3位

求 3 開根5 n次方的整數部分最後3位,請補足前導零 分析 首先 1 3 開根5 n次方的展開為 an bn 根號5 的形式 同時也有 2 3 開根5 n次方 an bn 根號5 則可以得出 1 2 2 an,so 1 2 an 2 同時可以知道0 所以只要我們可以求出 an 那答案就。嘻嘻。3 ...