Redian新闻
>
$925的5D,试的时候应该注意什么?
avatar
$925的5D,试的时候应该注意什么?# PhotoGear - 摄影器材
s*n
1
这两天广州闷热得很,人也郁燥,呼出来的气滚烫的,跟喷火娃一样。
到了饭点也胃口乏乏,只想来点汤汤水水的,下下火。
去市场买了一颗大芥菜,和冰箱里的咸骨一起,煲了锅清热养胃芥菜咸骨。
广东人爱吃咸骨,龙骨或是排骨斩件提回来,抹上重盐,放冰箱过夜,拿出来煲粥煮汤
都是一流。
汤底香醇,没有丝毫油腻腥气 ,肉质还紧实鲜香,再不爱吃猪肉的人,都会喜欢。
芥菜清火解毒,开胃消食,广东湿热,所以广东人尤爱吃新鲜芥菜。
拿来清炒或是煮汤都好,芥菜中微微的清苦,不止下火,还格外开胃。
做法非常简单,但在这样的天,喝上两碗芥菜咸骨汤,全身都舒坦了!
-芥菜咸骨 -
[食材 ]
芥菜排骨葱姜
胡萝卜盐食用油蒜末
[做法 ]
1.排骨冲洗后滤干水分,下大量盐抓匀,放进冰箱冷藏
腌渍咸骨,最好是隔夜,肉质才会紧实,放两晚更好。盐要下得重手,腌渍好洗去表面
的盐就好
2.芥菜切段、胡萝卜切片
3.腌渍好的咸骨和姜葱一起入凉水锅焯水,煮开后捞出,沥干水分
4.另取一锅加入咸骨,水多加一些,大火煮开,转小火焖煮三十分钟
咸骨中的盐分足够煮汤了,不需要额外放盐
5.加入芥菜、胡萝卜片,煮五分钟,完成了~
放了几片胡萝卜,不止颜色好看,还制衡了芥菜的苦味,汤底滋味也更丰富。
入口先是咸骨的醇香,再是胡萝卜的清甜,回味中又有芥菜的清苦,非常美妙。
口鼻里火急火燎,耐下性子煲一锅温热的汤,春日的郁燥,就抚平了。
avatar
w*x
2
Multiple two strings “1234” * “23” = “28382”
谁能给出比较简洁的程序?? 如果不管异常处理
avatar
j*g
3
请问如何操作?谢谢!
avatar
o*6
4
刚刚在craigslist上联系到一个$925的5D,准备去试试机器。以前没买过二手单反,没
什么经验。麻烦各位版友告诉我试机的时候应该注意些什么?谢谢!
avatar
t*7
5
转数组计算么??还是有更虎的想法?
avatar
t*r
6
直接用ATM卡取.我的是每天1000刀的限制.
avatar
kc
7
主要是看人怎么样 检查相机就试试各种功能有没有问题咯
实在不放心带个笔记本去拍了导电脑里再仔细看看

【在 o*******6 的大作中提到】
: 刚刚在craigslist上联系到一个$925的5D,准备去试试机器。以前没买过二手单反,没
: 什么经验。麻烦各位版友告诉我试机的时候应该注意些什么?谢谢!

avatar
w*x
8

这是Glass door 上别人报的电面题, 我不知道这个世界上有几个人能在15分钟内写出来

【在 t*********7 的大作中提到】
: 转数组计算么??还是有更虎的想法?
avatar
o*6
9
5D比较常见的毛病都有什么呢?
avatar
t*7
10
15分钟, BUG FREE还是有点难度吧,先要转数组,转数组之后还要注意进位...稍微不留
神就写错了

出来

【在 w****x 的大作中提到】
:
: 这是Glass door 上别人报的电面题, 我不知道这个世界上有几个人能在15分钟内写出来

avatar
o*6
11
还有,5D的画质和7D相比怎么样?
avatar
a*a
13
低感还是5D好吧

【在 o*******6 的大作中提到】
: 还有,5D的画质和7D相比怎么样?
avatar
s*n
14
要处理大数字吗?如果不处理大数字应该很简单吧
avatar
c*t
15
斑竹们,回答问题有工资不? 大家都没有积极性啊.
如果你是很新很新手,上新的7D吧.旧的5D的水有点深,没法查快门,反光板脱落啥的.
旧机器,听听快门的声音是不是正常,看看机器表面的磨损,配件是不是全.拍几张,看看
几个对焦点是不是都正常工作.看看取景器里灰多不多.check一下反光板和mount上面有
没有损伤.回放看看LCD屏上显示有没有很明显的坏点. 然后黑屏30秒曝光看看CMOS坏点
. 最好放电脑上看,那块显示屏不咋的.
如果你懂相机,和买家一边聊一边试机器,问些机器的问题,他如果都是撒谎的话,多聊些
也许就会露出马脚的.
纯新手还是买新机八
包子?

【在 o*******6 的大作中提到】
: 还有,5D的画质和7D相比怎么样?
avatar
P*U
16
数有多大?不是很大的话直接Long.parseLong就好吧,kidding.
大的话就只能大数乘法了,以前做acm写过
avatar
h*e
17
二手相机么?
第一看实际磨损。
LCD磨损。闪灯接口磨损。三脚架接口磨损。grip的蒙皮磨损。strap钩子处的磨损。
这些都是正常的。磨损多只能说明使用多,磨损少也不能说明使用少,大致说明要么使
用少,要么是studio使用。
但是dents、cracks,这些就不正常了。就是磕了什么硬的。这个就得小心。LCD有大
scratch影响浏览也肯定是不好的。
5D一般底部磨损会比较重。注意一点。磨损重的肯定是pro,快门数一般很高。
第二检查对焦和快门。5D这种机器不该跑焦的。如果带50 1.4,只要操作没问题,肯定
不该跑焦,跑了就是有问题了。(但是大光圈虚焦完全可能,所以得make sure自己操
作没问题)。快门的话要没有迟滞。注意检查AI Servo和AI focus模式。快门出问题的
时候,这两种对焦方式肯定先出问题。
第三看序列号,5D的第一位是0、1、2,2的最后了,比较新。0的最老。然后就是盒子
、说明书、USB cable之类。注意charger和电池都要是原厂的。佳能的电池是蓝色底子
,上面有4位序列号,5D的电池序列号不大清楚,但是应该在5XXX-7XXX之间。电池
avatar
w*x
18
肯定要考虑溢出的情况, 不可能直接转数字相乘再转回来吧
avatar
a*a
19
检查sensor是否干净
光圈优先,镜头最小光圈,iso无所谓,快门速度无所谓,对着大面积纯色物体(蓝天
或者白墙)
回放以后放大移动检查

【在 h*******e 的大作中提到】
: 二手相机么?
: 第一看实际磨损。
: LCD磨损。闪灯接口磨损。三脚架接口磨损。grip的蒙皮磨损。strap钩子处的磨损。
: 这些都是正常的。磨损多只能说明使用多,磨损少也不能说明使用少,大致说明要么使
: 用少,要么是studio使用。
: 但是dents、cracks,这些就不正常了。就是磕了什么硬的。这个就得小心。LCD有大
: scratch影响浏览也肯定是不好的。
: 5D一般底部磨损会比较重。注意一点。磨损重的肯定是pro,快门数一般很高。
: 第二检查对焦和快门。5D这种机器不该跑焦的。如果带50 1.4,只要操作没问题,肯定
: 不该跑焦,跑了就是有问题了。(但是大光圈虚焦完全可能,所以得make sure自己操

avatar
g*y
20
我只能写到这样了。
public String multiply(String a, String b) {
ArrayList la = convert(a);
ArrayList lb = convert(b);

ArrayList lc = new ArrayList();
for (int i=0; i
int remainder = 0;
for (int i=0; ifor (int j=0; jint s = lc.get(i+j) + la.get(i)*lb.get(j) + remainder;
lc.set(i+j, s%1000);
remainder = s/1000;
}

int k = i + lb.size();
while (remainder > 0) {
int s = lc.get(k) + remainder;
lc.set(k, s%1000);
remainder = s/1000;
k++;
}
}

StringBuilder sb = new StringBuilder();
for (int i : lc) {
sb.insert(0, String.format("%03d", i));
}
return sb.toString().replaceAll("^0*", "").trim();
}

private ArrayList convert(String a) {
ArrayList list = new ArrayList();
int i;
for (i=a.length(); i>=3; i-=3) {
list.add(Integer.parseInt(a.substring(i-3, i)));
}
if (i > 0) list.add(Integer.parseInt(a.substring(0, i)));
return list;
}
avatar
o*6
21
谢啦。我也想给你包子啊,可是自己是新手一个包子都没有啊。
顺便问下,怎么拿包子?

【在 c*****t 的大作中提到】
: 斑竹们,回答问题有工资不? 大家都没有积极性啊.
: 如果你是很新很新手,上新的7D吧.旧的5D的水有点深,没法查快门,反光板脱落啥的.
: 旧机器,听听快门的声音是不是正常,看看机器表面的磨损,配件是不是全.拍几张,看看
: 几个对焦点是不是都正常工作.看看取景器里灰多不多.check一下反光板和mount上面有
: 没有损伤.回放看看LCD屏上显示有没有很明显的坏点. 然后黑屏30秒曝光看看CMOS坏点
: . 最好放电脑上看,那块显示屏不咋的.
: 如果你懂相机,和买家一边聊一边试机器,问些机器的问题,他如果都是撒谎的话,多聊些
: 也许就会露出马脚的.
: 纯新手还是买新机八
: 包子?

avatar
p*2
22
店面写的话还有有些麻烦。onsite更合适。随便写了一个练练手。不调试不能一次搞定
呀。
public class test4
{
public static void main(String[] args)
{
test4 t = new test4();
System.out.println(t.Multiple("1234", "23"));
}
String add(String s1, String s2)
{
StringBuffer sb = new StringBuffer();
int carrier = 0;
int p1 = s1.length() - 1;
int p2 = s2.length() - 1;
while (p1 >= 0 || p2 >= 0)
{
int a = 0;
int b = 0;
if (p1 >= 0)
{
a = s1.charAt(p1) - '0';
p1--;
}
if (p2 >= 0)
{
b = s2.charAt(p2) - '0';
p2--;
}
sb.append((a + b + carrier) % 10);
carrier = (a + b + carrier) / 10;
}
return sb.reverse().toString();
}
String mul(String a, int c, int b)
{
StringBuffer sb = new StringBuffer();
int carrier = 0;
for (int i = a.length() - 1; i >= 0; i--)
{
int t = (a.charAt(i) - '0') * c;
sb.append((t + carrier) % 10);
carrier = (t + carrier) / 10;
}
sb.reverse();
for (int i = 0; i < b; i++)
sb.append(0);
return sb.toString();
}
String Multiple(String a, String b)
{
String result = "";
for (int i = 0; i < b.length(); i++)
{
result = add(result, mul(a, b.charAt(b.length() - 1 - i) - '0',
i));
}
return result;
}
}
avatar
o*6
23
谢斑竹。
是不是说,如果cmos很脏,就不要买,因为这说明平时保养的不够好?

【在 a***a 的大作中提到】
: 检查sensor是否干净
: 光圈优先,镜头最小光圈,iso无所谓,快门速度无所谓,对着大面积纯色物体(蓝天
: 或者白墙)
: 回放以后放大移动检查

avatar
s*n
24
carrier在循环结束后没有处理啊

【在 p*****2 的大作中提到】
: 店面写的话还有有些麻烦。onsite更合适。随便写了一个练练手。不调试不能一次搞定
: 呀。
: public class test4
: {
: public static void main(String[] args)
: {
: test4 t = new test4();
: System.out.println(t.Multiple("1234", "23"));
: }
: String add(String s1, String s2)

avatar
x*c
25
不知道现在佳能还做不做5D的免费反光板加固,如果做。
问一下他反光板有没有送5D免费加固过。
如果没有,免费送佳能加固,回来时机器应该会清理的很干净。

【在 o*******6 的大作中提到】
: 谢斑竹。
: 是不是说,如果cmos很脏,就不要买,因为这说明平时保养的不够好?

avatar
p*2
26

是。

【在 s******n 的大作中提到】
: carrier在循环结束后没有处理啊
avatar
o*6
27
AI-servo出了问题是什么样子的?是完全不能自动追焦吗?

【在 h*******e 的大作中提到】
: 二手相机么?
: 第一看实际磨损。
: LCD磨损。闪灯接口磨损。三脚架接口磨损。grip的蒙皮磨损。strap钩子处的磨损。
: 这些都是正常的。磨损多只能说明使用多,磨损少也不能说明使用少,大致说明要么使
: 用少,要么是studio使用。
: 但是dents、cracks,这些就不正常了。就是磕了什么硬的。这个就得小心。LCD有大
: scratch影响浏览也肯定是不好的。
: 5D一般底部磨损会比较重。注意一点。磨损重的肯定是pro,快门数一般很高。
: 第二检查对焦和快门。5D这种机器不该跑焦的。如果带50 1.4,只要操作没问题,肯定
: 不该跑焦,跑了就是有问题了。(但是大光圈虚焦完全可能,所以得make sure自己操

avatar
w*x
28
string digitMul(string str, int nDigit)
{
assert(nDigit >= 0 && nDigit <= 9);
int nCarrier = 0;
string strRes;
for (int i = str.size()-1; i >= 0; i--)
{
int nTmpDigit = str[i] - '0';
int nRes = nTmpDigit * nDigit;
nRes += nCarrier;
strRes.insert(strRes.begin(), ('0' + nRes%10));
nCarrier = nRes/10;
}
if (nCarrier > 0)
strRes.insert(strRes.begin(), ('0' + nCarrier));
return strRes;
}
string StrAdd(string str1, string str2)
{
int nIter1 = str1.size() - 1;
int nIter2 = str2.size() - 1;
string strRes;
bool bCarr = false;
while (nIter1 >= 0 && nIter2 >= 0)
{
int nDigit = str1[nIter1] - '0' + str2[nIter2] - '0';
if (bCarr) nDigit++;
bCarr = nDigit >= 10;
nDigit %= 10;
strRes.insert(strRes.begin(), ('0' + nDigit));
nIter1--, nIter2--;
}
string* pLftStr = NULL;
int nLft = -1;
if (nIter1 >= 0)
{
pLftStr = &str1;
nLft = nIter1;
}
if (nIter2 >= 0)
{
pLftStr = &str2;
nLft = nIter2;
}
if (pLftStr != NULL)
{
while (nLft >= 0)
{
int nDigit = (*pLftStr)[nLft] - '0';
if (bCarr) nDigit++;
bCarr = nDigit >= 10;
nDigit %= 10;
strRes.insert(strRes.begin(), (char)('0' + nDigit));
nLft--;
}
}
if (bCarr)
strRes.insert(strRes.begin(), '1');
return strRes;
}
string Multiple(string str1, string str2)
{
string strRes = "0";
for (int i = str2.size()-1; i >= 0; i--)
{
string strTmp = digitMul(str1, str2[i] - '0');
strTmp.append((str2.size()-1) - i, '0');
strRes = StrAdd(strRes, strTmp);
}
return strRes;
}
avatar
o*6
29
C家的多数机器我还是很熟悉的。问他什么问题能让他露马脚?

【在 c*****t 的大作中提到】
: 斑竹们,回答问题有工资不? 大家都没有积极性啊.
: 如果你是很新很新手,上新的7D吧.旧的5D的水有点深,没法查快门,反光板脱落啥的.
: 旧机器,听听快门的声音是不是正常,看看机器表面的磨损,配件是不是全.拍几张,看看
: 几个对焦点是不是都正常工作.看看取景器里灰多不多.check一下反光板和mount上面有
: 没有损伤.回放看看LCD屏上显示有没有很明显的坏点. 然后黑屏30秒曝光看看CMOS坏点
: . 最好放电脑上看,那块显示屏不咋的.
: 如果你懂相机,和买家一边聊一边试机器,问些机器的问题,他如果都是撒谎的话,多聊些
: 也许就会露出马脚的.
: 纯新手还是买新机八
: 包子?

avatar
c*r
30
昨天我刚写过 不过不是转的数组 是转的linkedlist 写得我差点吐血身亡。 如果
面试问到这个题目我也只好先把算法和面试官说一下 得到肯定以后慢慢开始写。
bug free的确有难度啊
avatar
h*e
31
5D现在还做反光镜加固。加固的同时你可以在单子上要他给你做一个cancount,看一下
快门数。
AI SERVO如果坏了,就是按不下快门。这个你要稍微多拍几下。或者说快门迟滞感非常
重,不使劲摁就摁不下去这种。
总的来说就是,快门到寿命了,主要表现是快门迟滞感重。而这个快门迟滞感,在使用
AI FOUCS连拍的时候会最为明显。就是这么个意思。
说真的Cmos这个是没办法。sensor总会脏的。不要太脏就可以了。只是恶心一点。其他
的影响不大的。
另外检查CMOS是否干净的时候,不必对上焦。白墙没法对焦的,直接MF,也不用调整,
摁快门就是了。
你要够狠,就在拍了白墙之后,再用photoshop acdsee之类的东西来个自动对比度。我
基本可以保证这么看一次,没有一台二手机器的CMOS不是脏的。我一向不太在意这个的
。没办法的……不过你可以就此还价,说清洗一次cmos要30云云……当然人家如果怒了
就没办法了。。。。
avatar
i*e
32
#include
#include
#include
#include
using namespace std;
void multiply(vector &A, vector &B, vector &C) {
int carry = 0;
int m = A.size(), n = B.size();
for (int i = 0; i < m; i++) {
carry = 0;
for (int j = 0; j < n; j++) {
assert(i+j < m+n);
C[i+j] += (A[i] * B[j]) + carry;
carry = C[i+j] / 10;
C[i+j] %= 10;
}
C[i+n] = carry;
}
}
string multiply(string a, string b) {
int m = a.length(), n = b.length();
vector dig1, dig2;
for (int i = m-1; i >= 0; i--)
dig1.push_back(a[i] - '0');
for (int i = n-1; i >= 0; i--)
dig2.push_back(b[i] - '0');

vector dig3(m+n, 0);
multiply(dig1, dig2, dig3);

string ret;
int sz = (dig3[m+n-1] == 0) ? m+n-1 : m+n;
for (int i = sz-1; i >= 0; i--)
ret.push_back(dig3[i] + '0');

return ret;
}
avatar
o*6
33
谢谢啦,真是高手啊!

【在 h*******e 的大作中提到】
: 5D现在还做反光镜加固。加固的同时你可以在单子上要他给你做一个cancount,看一下
: 快门数。
: AI SERVO如果坏了,就是按不下快门。这个你要稍微多拍几下。或者说快门迟滞感非常
: 重,不使劲摁就摁不下去这种。
: 总的来说就是,快门到寿命了,主要表现是快门迟滞感重。而这个快门迟滞感,在使用
: AI FOUCS连拍的时候会最为明显。就是这么个意思。
: 说真的Cmos这个是没办法。sensor总会脏的。不要太脏就可以了。只是恶心一点。其他
: 的影响不大的。
: 另外检查CMOS是否干净的时候,不必对上焦。白墙没法对焦的,直接MF,也不用调整,
: 摁快门就是了。

avatar
c*e
34
正常的程序员:
int n1, n2;
sscanf (str1,"%d",&n1);
sscanf (str2,"%d",&n2);
sprintf (buffer, "%d", n1 * n2);

【在 w****x 的大作中提到】
: Multiple two strings “1234” * “23” = “28382”
: 谁能给出比较简洁的程序?? 如果不管异常处理

avatar
o*6
35
再问一下,有没有软件可以看5D快门数呢?在买的时候就能看的。
一般成色比较好的5D不会卖925吧?就怕快门已经15w以上了。如果快门报废了,送去换
一个要很贵吗?

【在 h*******e 的大作中提到】
: 5D现在还做反光镜加固。加固的同时你可以在单子上要他给你做一个cancount,看一下
: 快门数。
: AI SERVO如果坏了,就是按不下快门。这个你要稍微多拍几下。或者说快门迟滞感非常
: 重,不使劲摁就摁不下去这种。
: 总的来说就是,快门到寿命了,主要表现是快门迟滞感重。而这个快门迟滞感,在使用
: AI FOUCS连拍的时候会最为明显。就是这么个意思。
: 说真的Cmos这个是没办法。sensor总会脏的。不要太脏就可以了。只是恶心一点。其他
: 的影响不大的。
: 另外检查CMOS是否干净的时候,不必对上焦。白墙没法对焦的,直接MF,也不用调整,
: 摁快门就是了。

avatar
c*e
36
2B程序员才这么写。

【在 i**********e 的大作中提到】
: #include
: #include
: #include
: #include
: using namespace std;
: void multiply(vector &A, vector &B, vector &C) {
: int carry = 0;
: int m = A.size(), n = B.size();
: for (int i = 0; i < m; i++) {
: carry = 0;

avatar
h*e
37
没有软件看。抱歉。
可以看快门的是20D。然后就是eos info,看450D 40D 50D 1000D 5D II。然后就是1D
cancount,看1D III以下的机器。其他的一律看不了或者只能凭EXIF看所以不准。听说
350D、400D hack firmware之后也可以看,不知道准不准。
换快门不知道多少钱。以前20D换的时候要$180。总之不便宜。可以打个电话问一下NJ
或者Irvine,CA的CANON FACTORY SERVICE。
avatar
g*y
38
orz, 这个简洁。

【在 c*****e 的大作中提到】
: 正常的程序员:
: int n1, n2;
: sscanf (str1,"%d",&n1);
: sscanf (str2,"%d",&n2);
: sprintf (buffer, "%d", n1 * n2);

avatar
o*6
39
$825拿下了。谢谢各位版友!
avatar
c*r
40
我想FB的这个题目的意思是 两个输入的string表示的数字会非常长超过64bit或者更
多。 所以楼上的那个算法如果真求过面试官意见的话 才是正解。 不过,我个人
不喜欢在这里贴代码的。

【在 c*****e 的大作中提到】
: 2B程序员才这么写。
avatar
x*c
41
。。。
发包子吧。

【在 o*******6 的大作中提到】
: $825拿下了。谢谢各位版友!
avatar
q*c
42
对于big integer的乘法,1337的解法是正确的,我想也是考察的要点,不然也太
trivial了.
avatar
c*y
43
re baozi

【在 x****c 的大作中提到】
: 。。。
: 发包子吧。

avatar
w*x
44
Multiple two strings “1234” * “23” = “28382”
谁能给出比较简洁的程序?? 如果不管异常处理
avatar
o*6
45
我也想发啊,可是自己一个都没有啊。
弱问一下怎么能领到包子?就是靠回答问题吗?

【在 x****c 的大作中提到】
: 。。。
: 发包子吧。

avatar
t*7
46
转数组计算么??还是有更虎的想法?
avatar
o*6
47
其实我也是运气比较好,那个人下个月要搬家去德国了,很多东西着急卖出去(我去试
机器的那么一小会儿就有人打电话要来看车),不太计较价格,所以给了我砍价的余地
avatar
w*x
48

这是Glass door 上别人报的电面题, 我不知道这个世界上有几个人能在15分钟内写出来

【在 t*********7 的大作中提到】
: 转数组计算么??还是有更虎的想法?
avatar
t*8
49
拿到机器了吗?
发包子吧

【在 o*******6 的大作中提到】
: 其实我也是运气比较好,那个人下个月要搬家去德国了,很多东西着急卖出去(我去试
: 机器的那么一小会儿就有人打电话要来看车),不太计较价格,所以给了我砍价的余地
: 。

avatar
t*7
50
15分钟, BUG FREE还是有点难度吧,先要转数组,转数组之后还要注意进位...稍微不留
神就写错了

出来

【在 w****x 的大作中提到】
:
: 这是Glass door 上别人报的电面题, 我不知道这个世界上有几个人能在15分钟内写出来

avatar
x*c
51
他送佳能加固反光板了么?

【在 o*******6 的大作中提到】
: 其实我也是运气比较好,那个人下个月要搬家去德国了,很多东西着急卖出去(我去试
: 机器的那么一小会儿就有人打电话要来看车),不太计较价格,所以给了我砍价的余地
: 。

avatar
o*6
53
没有。我准备周一把它送去加固,顺便清洗下cmos。

【在 x****c 的大作中提到】
: 他送佳能加固反光板了么?
avatar
s*n
54
要处理大数字吗?如果不处理大数字应该很简单吧
avatar
x*c
55
好deal啊

【在 o*******6 的大作中提到】
: 没有。我准备周一把它送去加固,顺便清洗下cmos。
avatar
P*U
56
数有多大?不是很大的话直接Long.parseLong就好吧,kidding.
大的话就只能大数乘法了,以前做acm写过
avatar
w*x
57
肯定要考虑溢出的情况, 不可能直接转数字相乘再转回来吧
avatar
g*y
58
我只能写到这样了。
public String multiply(String a, String b) {
ArrayList la = convert(a);
ArrayList lb = convert(b);
ArrayList lc = new ArrayList();
for (int i=0; ifor (int i=0; iint remainder = 0;
for (int j=0; jint s = lc.get(i+j) + la.get(i)*lb.get(j) + remainder;
lc.set(i+j, s%1000);
remainder = s/1000;
}
if (remainder > 0) lc.set(i+lb.size(), remainder);
}
StringBuilder sb = new StringBuilder();
for (int i : lc) {
sb.insert(0, String.format("%03d", i));
}
return sb.toString().replaceAll("^0*", "").trim();
}
private ArrayList convert(String a) {
ArrayList list = new ArrayList();
int i;
for (i=a.length(); i>=3; i-=3) {
list.add(Integer.parseInt(a.substring(i-3, i)));
}
if (i > 0) list.add(Integer.parseInt(a.substring(0, i)));
return list;
}
avatar
p*2
59
店面写的话还有有些麻烦。onsite更合适。随便写了一个练练手。不调试不能一次搞定
呀。
public class test4
{
public static void main(String[] args)
{
test4 t = new test4();
System.out.println(t.Multiple("1234", "23"));
}
String add(String s1, String s2)
{
StringBuffer sb = new StringBuffer();
int carrier = 0;
int p1 = s1.length() - 1;
int p2 = s2.length() - 1;
while (p1 >= 0 || p2 >= 0)
{
int a = 0;
int b = 0;
if (p1 >= 0)
{
a = s1.charAt(p1) - '0';
p1--;
}
if (p2 >= 0)
{
b = s2.charAt(p2) - '0';
p2--;
}
sb.append((a + b + carrier) % 10);
carrier = (a + b + carrier) / 10;
}
return sb.reverse().toString();
}
String mul(String a, int c, int b)
{
StringBuffer sb = new StringBuffer();
int carrier = 0;
for (int i = a.length() - 1; i >= 0; i--)
{
int t = (a.charAt(i) - '0') * c;
sb.append((t + carrier) % 10);
carrier = (t + carrier) / 10;
}
sb.reverse();
for (int i = 0; i < b; i++)
sb.append(0);
return sb.toString();
}
String Multiple(String a, String b)
{
String result = "";
for (int i = 0; i < b.length(); i++)
{
result = add(result, mul(a, b.charAt(b.length() - 1 - i) - '0',
i));
}
return result;
}
}
avatar
s*n
60
carrier在循环结束后没有处理啊

【在 p*****2 的大作中提到】
: 店面写的话还有有些麻烦。onsite更合适。随便写了一个练练手。不调试不能一次搞定
: 呀。
: public class test4
: {
: public static void main(String[] args)
: {
: test4 t = new test4();
: System.out.println(t.Multiple("1234", "23"));
: }
: String add(String s1, String s2)

avatar
p*2
61

是。

【在 s******n 的大作中提到】
: carrier在循环结束后没有处理啊
avatar
w*x
62
string digitMul(string str, int nDigit)
{
assert(nDigit >= 0 && nDigit <= 9);
int nCarrier = 0;
string strRes;
for (int i = str.size()-1; i >= 0; i--)
{
int nTmpDigit = str[i] - '0';
int nRes = nTmpDigit * nDigit;
nRes += nCarrier;
strRes.insert(strRes.begin(), ('0' + nRes%10));
nCarrier = nRes/10;
}
if (nCarrier > 0)
strRes.insert(strRes.begin(), ('0' + nCarrier));
return strRes;
}
string StrAdd(string str1, string str2)
{
int nIter1 = str1.size() - 1;
int nIter2 = str2.size() - 1;
string strRes;
bool bCarr = false;
while (nIter1 >= 0 && nIter2 >= 0)
{
int nDigit = str1[nIter1] - '0' + str2[nIter2] - '0';
if (bCarr) nDigit++;
bCarr = nDigit >= 10;
nDigit %= 10;
strRes.insert(strRes.begin(), ('0' + nDigit));
nIter1--, nIter2--;
}
string* pLftStr = NULL;
int nLft = -1;
if (nIter1 >= 0)
{
pLftStr = &str1;
nLft = nIter1;
}
if (nIter2 >= 0)
{
pLftStr = &str2;
nLft = nIter2;
}
if (pLftStr != NULL)
{
while (nLft >= 0)
{
int nDigit = (*pLftStr)[nLft] - '0';
if (bCarr) nDigit++;
bCarr = nDigit >= 10;
nDigit %= 10;
strRes.insert(strRes.begin(), (char)('0' + nDigit));
nLft--;
}
}
if (bCarr)
strRes.insert(strRes.begin(), '1');
return strRes;
}
string Multiple(string str1, string str2)
{
string strRes = "0";
for (int i = str2.size()-1; i >= 0; i--)
{
string strTmp = digitMul(str1, str2[i] - '0');
strTmp.append((str2.size()-1) - i, '0');
strRes = StrAdd(strRes, strTmp);
}
return strRes;
}
avatar
c*r
63
昨天我刚写过 不过不是转的数组 是转的linkedlist 写得我差点吐血身亡。 如果
面试问到这个题目我也只好先把算法和面试官说一下 得到肯定以后慢慢开始写。
bug free的确有难度啊
avatar
i*e
64
#include
#include
#include
#include
using namespace std;
void multiply(vector &A, vector &B, vector &C) {
int carry = 0;
int m = A.size(), n = B.size();
for (int i = 0; i < m; i++) {
carry = 0;
for (int j = 0; j < n; j++) {
assert(i+j < m+n);
C[i+j] += (A[i] * B[j]) + carry;
carry = C[i+j] / 10;
C[i+j] %= 10;
}
C[i+n] = carry;
}
}
string multiply(string a, string b) {
int m = a.length(), n = b.length();
vector dig1, dig2;
for (int i = m-1; i >= 0; i--)
dig1.push_back(a[i] - '0');
for (int i = n-1; i >= 0; i--)
dig2.push_back(b[i] - '0');

vector dig3(m+n, 0);
multiply(dig1, dig2, dig3);

string ret;
int sz = (dig3[m+n-1] == 0) ? m+n-1 : m+n;
for (int i = sz-1; i >= 0; i--)
ret.push_back(dig3[i] + '0');

return ret;
}
avatar
c*e
65
正常的程序员:
int n1, n2;
sscanf (str1,"%d",&n1);
sscanf (str2,"%d",&n2);
sprintf (buffer, "%d", n1 * n2);

【在 w****x 的大作中提到】
: Multiple two strings “1234” * “23” = “28382”
: 谁能给出比较简洁的程序?? 如果不管异常处理

avatar
c*e
66
2B程序员才这么写。

【在 i**********e 的大作中提到】
: #include
: #include
: #include
: #include
: using namespace std;
: void multiply(vector &A, vector &B, vector &C) {
: int carry = 0;
: int m = A.size(), n = B.size();
: for (int i = 0; i < m; i++) {
: carry = 0;

avatar
g*y
67
orz, 这个简洁。

【在 c*****e 的大作中提到】
: 正常的程序员:
: int n1, n2;
: sscanf (str1,"%d",&n1);
: sscanf (str2,"%d",&n2);
: sprintf (buffer, "%d", n1 * n2);

avatar
c*r
68
我想FB的这个题目的意思是 两个输入的string表示的数字会非常长超过64bit或者更
多。 所以楼上的那个算法如果真求过面试官意见的话 才是正解。 不过,我个人
不喜欢在这里贴代码的。

【在 c*****e 的大作中提到】
: 2B程序员才这么写。
avatar
q*c
69
对于big integer的乘法,1337的解法是正确的,我想也是考察的要点,不然也太
trivial了.
avatar
l*i
70
目的就是大数吧

【在 s******n 的大作中提到】
: 要处理大数字吗?如果不处理大数字应该很简单吧
avatar
b*e
71
贴一个我的版本:
string multiply(string num1, string num2) {
string res(num1.size() + num2.size(), '0');
int carry = 0;
for (int i = num2.size() - 1; i >= 0; i--) {
int digit2 = num2[i] - '0';
for (int j = num1.size() - 1; j >= 0; j--) {
int m = digit2 * (num1[j] - '0') + res[i + j + 1] - '0' + carry;
res[i + j + 1] = m % 10 + '0';
carry = m / 10;
}
if (carry > 0) {
int m = res[i] - '0' + carry;
res[i] = m % 10 + '0';
carry = m / 10;
}
}
for (int i = 0; i < res.size(); i++) {
if (res[i] != '0')
return res.substr(i);
}
return "0";
}

【在 w****x 的大作中提到】
: Multiple two strings “1234” * “23” = “28382”
: 谁能给出比较简洁的程序?? 如果不管异常处理

avatar
t*n
72
void calculateBit(string &result, const string b,int k){
result.push_back('0');
int carry = 0;
int i;
for (i=1; i<=b.size(); i++) {

int m =b[b.size()-i]-'0';
int r=0;
if (i>result.size()) {
result = '0'+result;
}
r = result[result.size()-i]-'0';
int sum = m*k + carry + r;
result[result.size()-i] = sum%10+'0';
carry = sum/10;
}


while (carry!=0) {
if (i>result.size()) {
result = '0'+result;
}
int temp1 = result[result.size()-i] - '0';
int sum = temp1 + carry;
result[result.size()-i] = sum%10+'0';
carry = sum/10;
i++;
}
}
string bigNum(const string a,const string b){
string result;
for (int i=0; iint k = a[i]-'0';
calculateBit(result,b,k);
}
return result;
}
感觉弱爆了
avatar
w*o
74
我也凑个热闹
public String multiply(String num1, String num2) {
int n = num1.length();
int m = num2.length();
int[] result = new int[n + m];

for(int i = m - 1; i >= 0; i--) {
int k = n + i;
int a = num2.charAt(i) - '0';
for(int j = n - 1; j>= 0; j--) {
int x = a * (num1.charAt(j) - '0');
x += result[k];
result[k--] = x % 10;
result[k] += x / 10;
}
}

StringBuffer sb = new StringBuffer();
int i = 0;
// remove leading ‘0’s
while(i < (n + m - 1) && result[i] == 0)
i++;

for(; i < (n + m); i++)
sb.append(result[i]);

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