Redian新闻
>
大家有做Survey标地界的经验吗
avatar
大家有做Survey标地界的经验吗# Living
y*m
1
五、实现一个整数除法的函数,不使用除号,可以使用加号、减号和乘号,函数只返回
商.
function(int x,y){
n=x;k=0;
while(n>y){
n=n-y;
k++;
}
return k;
}
avatar
w*r
2
前不久买的旧房,准备加Fence。听说最好要做Survey把地界标出来,但是大概要花
2000左右。
觉得贵了,大家有没有类似的经验?多谢了。
avatar
p*r
3
you can only get 60pts with this algorithm

【在 y***m 的大作中提到】
: 五、实现一个整数除法的函数,不使用除号,可以使用加号、减号和乘号,函数只返回
: 商.
: function(int x,y){
: n=x;k=0;
: while(n>y){
: n=n-y;
: k++;
: }
: return k;
: }

avatar
h*b
4
in my area, go to city and request a copy of the original builder's blue
print. it should show the prop line. requirements maybe diff in your city
but the survey purpose is mainly to decide where the border line is and make
sure your fence doesn't go up on neighbor's lot

【在 w********r 的大作中提到】
: 前不久买的旧房,准备加Fence。听说最好要做Survey把地界标出来,但是大概要花
: 2000左右。
: 觉得贵了,大家有没有类似的经验?多谢了。

avatar
s*n
5
agree, how about the sign?
avatar
m*6
6
north jersey. i did that, about $900.
if only survey with only "paper", it is cheaper.
u have to ask them to put iron stake in the ground, more expensive.
even though i did that, the neighbour still has problem with me.

【在 w********r 的大作中提到】
: 前不久买的旧房,准备加Fence。听说最好要做Survey把地界标出来,但是大概要花
: 2000左右。
: 觉得贵了,大家有没有类似的经验?多谢了。

avatar
l*a
7
the most important
what will happen if y==0

【在 y***m 的大作中提到】
: 五、实现一个整数除法的函数,不使用除号,可以使用加号、减号和乘号,函数只返回
: 商.
: function(int x,y){
: n=x;k=0;
: while(n>y){
: n=n-y;
: k++;
: }
: return k;
: }

avatar
w*r
8
谢谢大家的回复。我们买房的时候Closing公司有帮我们OrderSurvery,就是在纸上的
,但是没有在地上标出来。好像如果不做地表,就只能采取比较保守的做法,向内缩进
1-2Feet了。
900多的话有点贵,但是好像还能接受;如果真是2000的话,还确实挺贵的。不知道是
不是马里兰这儿价格不一样。不过我接下去就找几家问一问吧。
avatar
R*i
9
还有一个bug, x,y相等时,k=0

【在 l*****a 的大作中提到】
: the most important
: what will happen if y==0

avatar
e*e
10
而且你要学会用shift.
其实我最喜欢用E^(log(X)-log(Y))
可惜他们不喜欢...
avatar
f*i
11
这个方法很好啊,赞一个,为什么他们不喜欢?

【在 e*****e 的大作中提到】
: 而且你要学会用shift.
: 其实我最喜欢用E^(log(X)-log(Y))
: 可惜他们不喜欢...

avatar
l*a
12
你觉得这个精确吗?
after u got log(x)

【在 f*********i 的大作中提到】
: 这个方法很好啊,赞一个,为什么他们不喜欢?
avatar
Z*4
13
public static double Mydivide(int a, int b, int n)
{
if(b==0)
{
System.out.println("b is 0, Error!");
System.exit(1);
}
double A=a;
double B=b;
double PartInt=0;
while(A>=B)
{
PartInt=PartInt+1.0;
A-=B;
}
double t=0.1;
double PartDeci=0;
while(n>0)
{
B=B*0.1;
for(int i=0;i<10;i++)
{
if(A>=B)
{
PartDeci+=t;
A-=B;
}
}
t=t*0.1;
n--;
}
return (PartInt+PartDeci);
}
这个算的是a/b 保留n位小数
avatar
Z*4
14
我这个是都是正整数情况
如果有负数的话稍微改改就行 用迭代
avatar
r*e
15
用那么多double的干什么,有点画蛇添足啊,原题只要返回整数的商就好了。
我写了个递归的,用对除数移位的方法,不过不知道是不是有更好的算法?
正在把递归的改成非递归的。

【在 Z**********4 的大作中提到】
: 我这个是都是正整数情况
: 如果有负数的话稍微改改就行 用迭代

avatar
v*d
16
呵呵,我被A家考到过这题。m/n, 商的范围是[0,m], 用binary search

【在 y***m 的大作中提到】
: 五、实现一个整数除法的函数,不使用除号,可以使用加号、减号和乘号,函数只返回
: 商.
: function(int x,y){
: n=x;k=0;
: while(n>y){
: n=n-y;
: k++;
: }
: return k;
: }

avatar
v*d
17
然后这个"binary"用右移实现

【在 v*****d 的大作中提到】
: 呵呵,我被A家考到过这题。m/n, 商的范围是[0,m], 用binary search
avatar
C*y
18
那每次得到middle以后,怎么得到middle*n?可以直接用乘法?还是也需要用加法实现?

【在 v*****d 的大作中提到】
: 然后这个"binary"用右移实现
avatar
v*d
19
恩,可以用乘法。

现?

【在 C***y 的大作中提到】
: 那每次得到middle以后,怎么得到middle*n?可以直接用乘法?还是也需要用加法实现?
avatar
Z*4
20
我这个不用double答案是不对的
你试试看

【在 r*****e 的大作中提到】
: 用那么多double的干什么,有点画蛇添足啊,原题只要返回整数的商就好了。
: 我写了个递归的,用对除数移位的方法,不过不知道是不是有更好的算法?
: 正在把递归的改成非递归的。

avatar
z*d
21
#include
#include
int divide (int x, int y) {
int m, n, sign_m, sign_n;
int j, k, l;
if (y == 0) {
printf("Dvided by 0 error! \n");
assert(0);
}
if (x < 0) {
m = -x;
sign_m = -1;
}
else {
m = x;
sign_m = 1;
}
if (y < 0) {
n = -y;
sign_n = -1;
}
else {
n = y;
sign_n = 1;
}
j = 0;
l = m;
while(1) {
k = (j+l)/2;
if (k*n > m)
l = k;
else
j = k;
if((j==l) || (j==(l-1)))
break;
}
if((sign_m + sign_n) == 0)
return -j;
else
return j;
}

【在 y***m 的大作中提到】
: 五、实现一个整数除法的函数,不使用除号,可以使用加号、减号和乘号,函数只返回
: 商.
: function(int x,y){
: n=x;k=0;
: while(n>y){
: n=n-y;
: k++;
: }
: return k;
: }

avatar
Z*4
22
额。。汗一个 没有看到原题只要求整数。。。
恩恩

【在 r*****e 的大作中提到】
: 用那么多double的干什么,有点画蛇添足啊,原题只要返回整数的商就好了。
: 我写了个递归的,用对除数移位的方法,不过不知道是不是有更好的算法?
: 正在把递归的改成非递归的。

avatar
r*e
23
你的code直接用了/啊!
还有做乘法的时候有可能
因为太大而出错,本来正的
变负了。还有一个建议,
变量名字长点好,要让自己
和别人好理解。都是ijklmn
的不好读。

【在 z*d 的大作中提到】
: #include
: #include
: int divide (int x, int y) {
: int m, n, sign_m, sign_n;
: int j, k, l;
: if (y == 0) {
: printf("Dvided by 0 error! \n");
: assert(0);
: }
: if (x < 0) {

avatar
z*d
24
Thanks. You're right.
For the divide by 2, is it OK to use right shift by 1 bit?
For potential overflow, we can use long to fix it. Right?

【在 r*****e 的大作中提到】
: 你的code直接用了/啊!
: 还有做乘法的时候有可能
: 因为太大而出错,本来正的
: 变负了。还有一个建议,
: 变量名字长点好,要让自己
: 和别人好理解。都是ijklmn
: 的不好读。

avatar
z*d
25
How about this one? Any suggestions or corrections will be highly
appreciated.
#include
#include
int divide (int x, int y) {
long long dividend, divisor, sign_dividend, sign_divisor;
long long low, middle, high;
int quotient;
/* check whether divisor is 0 */
if (y == 0) {
printf("Dvided by 0 error! \n");
assert(0);
}

/* unsign both dividend and divisor and mark the signess */
if (x < 0) {
dividend = -x;
sign_dividend = -1;
}
else {
dividend = x;
sign_dividend = 1;
}
if (y < 0) {
divisor = -y;
sign_divisor = -1;
}
else {
divisor = y;
sign_divisor = 1;
}
/* case dividend is equal to divisor */
if(dividend == divisor) {
if((sign_dividend + sign_divisor) == 0)
return -1;
else
return 1;
}
/* case divisor is 1 */
if(divisor == 1) {
quotient = (int)dividend;
if((sign_dividend + sign_divisor) == 0)
return -quotient;
else
return quotient;
}
/* binary search the quotient */
low = 0;
high = dividend;
while(1) {
middle = (low+high)>>1;
if (middle*divisor > dividend)
high = middle;
else
low = middle;
if((low==high) || (low==(high-1)))
break;
}
if(high*divisor == dividend)
quotient = (int)high;
else
quotient = (int)low;
if((sign_dividend + sign_divisor) == 0)
return (-quotient);
else
return quotient;
}

【在 r*****e 的大作中提到】
: 你的code直接用了/啊!
: 还有做乘法的时候有可能
: 因为太大而出错,本来正的
: 变负了。还有一个建议,
: 变量名字长点好,要让自己
: 和别人好理解。都是ijklmn
: 的不好读。

avatar
r*e
26
I guess the right shift is allowed.
But I still think there is a possibility to have overflow
even though long is used. Actually, I don't think multiplication
is needed and I think sub/add is enough to avoid potential problem
and also good for performance, i.e., faster than multiplication
when you think the deeper implementation.
Have not written my own version by bin-search though.

【在 z*d 的大作中提到】
: Thanks. You're right.
: For the divide by 2, is it OK to use right shift by 1 bit?
: For potential overflow, we can use long to fix it. Right?

avatar
z*d
27
With long long type, it should be ok for the overflow issue, I think.
As for the performance, I'm also curious whether there is binary search
solution with only add/sub operations, instead of multiplication.

【在 r*****e 的大作中提到】
: I guess the right shift is allowed.
: But I still think there is a possibility to have overflow
: even though long is used. Actually, I don't think multiplication
: is needed and I think sub/add is enough to avoid potential problem
: and also good for performance, i.e., faster than multiplication
: when you think the deeper implementation.
: Have not written my own version by bin-search though.

avatar
y*m
28
看来还是蛮多细节疏忽了...
function int calc(int x,y){
if(y==0)
return null;
else if (x==0)
return 0;

if (x>0)
c = 1;
else
c = -1;

if (y>0)
d = 1;
else
d = -1;

int n = x*c;
int m = y*d;
if(nreturn 0;

int k=0;
while(n>=m){
k++;
n=n-m;
}
return k*c*d;
}

【在 l*****a 的大作中提到】
: the most important
: what will happen if y==0

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。