导航
  • 主页
  • VC综合技术
  • 互联网技术
  • MFC AppLauncher
  • .NET 技术
  • 界面
  • 进程
  • 算法
  • 硬件/系统
  • 数据库
  • VC++技术资源

出2道面试题等待csdn牛人们解答

zjz800800 2009-07-24 09:38:55
1.求出1111!中有多少个1
2.求16的10次方
...全文
4874 2 收藏 178
写回复
178 条回复
切换为时间正序
请发表友善的回复…
发表回复
tyzqqq 2010-09-23
回复
microsoft2010 2009-08-10
汗 。。这都想得出来
回复
haha_test1 2009-08-10
public class Counter {

public static void jiecheng(){
long p=1l;
int count=0;

for(int i=1;i<1111;i++){
p=p*(p+1);

}
String s=String.valueOf(p);
int len=s.length();
char[] c=new char[len];
for(int j=0;j<s.length();j++){
c[j]=s.charAt(j);
}
for(int k=0;k<c.length;k++){
System.out.print(c[k]);
if(c[k]=='1'){
count++;
}
}
System.out.println();
System.out.println(count);
}
public static void main(String[] args){
jiecheng();
}
}
回复
huangshirock 2009-08-07
第一题明显4个1,1个!嘛。这么简单
回复
1: 1111! 4个1 加 一个!,答案是4
2: 16的10次方 = 16的10次方
回复
space_ngc1275 2009-08-06
[Quote=引用楼主 zjz800800 的回复:]
1.求出1111!中有多少个1
2.求16的10次方
[/Quote]

第一个问是不是18个1?先说说你的答案
第二个问吗类似学习汇编的时候,扩展字长的方法,扩展他的计算范围。
回复
kxscr 2009-08-06
如果是脑筋急转弯我会 1111! 里面有4个1嘛 哈哈 ~

玩笑 不要见怪
回复
weiyulin 2009-08-06


这还不简单


1.求出1111!中有多少个1
好明显有4个
2.求16的10次方
16 ^ 10


哈哈
回复
leoizumi 2009-08-06
第一题:

我用Java去写第一题的话,可以使用BigInteger这东西很容易实现

import java.math.BigInteger;
import java.util.*;

public class TongJi {

protected static ArrayList alist=new ArrayList();

static {
alist.add(BigInteger.valueOf(1));
}

public static synchronized BigInteger fun(int x) {
if(x<0) {
throw new IllegalArgumentException("阶乘数字必需是大于0 的~!");

}

for(int size=alist.size();size<=x;size++) {
BigInteger lastfun= (BigInteger) alist.get(size-1);
BigInteger nextfun=lastfun.multiply(BigInteger.valueOf(size));
alist.add(nextfun);
}
return (BigInteger) alist.get(x);
}




public static void main(String[] args) {

String s=fun(1111).toString();
int count = 0;
for(int i=0;i<s.length();i++) {

if(s.charAt(i)=='1')
count++;

}

System.out.println("1111!中1的出现次数是:"+count+"次");

}

}

-------------------------------------------------
得出的答案 是 1111!中1的出现次数是: 255 次
回复
zenowolf 2009-08-06
第一题:
#include <iostream>
using namespace std;
const long maxlen = 1111;

int main()
{
cout << "Input n: ";
int n = 0;
cin >> n;
cout << "1! + 2! + ... + " << n << "! = ";

int result[maxlen] = {0}, len_r = 0;
int temp[maxlen] = {0}, len_t = 0;

temp[0] = 1;
len_t = 1;

for (int x = 1; x <= n; x++)
{
temp[0] = temp[0] * x;
for (int j = 1; j < len_t; j++)
{
temp[j] = temp[j] * x + temp[j-1] / 10;
temp[j-1] = temp[j-1] % 10;
}

while (temp[len_t-1] > 10)
{
temp[len_t] = temp[len_t-1] / 10;
temp[len_t-1] = temp[len_t-1] % 10;
len_t++;
}

for (int i = 0; i < len_t; i++)
{
result[i] = result[i] + temp[i];
result[i+1] = result[i+1] + result[i] / 10;
result[i] = result[i] % 10;
}

len_r = len_t;
while (result[len_r] > 0)
{
result[len_r+1] = result[len_r] / 10;
result[len_r] = result[len_r] % 10;
len_r++;
}

}

int k = len_r - 1;
while (result[k] == 0 && k > 0) k--;
for (; k >= 0; k--) cout << result[k];
cout << endl << endl << "Total Digits: " << len_r << endl;
return 0;
}
=>1111 !但是要再算出1的个数就有点难度了
回复
alphagm 2009-08-06
[Quote=引用 95 楼 wantdrink 的回复:]
为什么是1800多个1,我算的是255,咋差这么远。。。。
[/Quote]

我算的也是255,1800多个肯定是错的!
回复
折shui 2009-08-05
厉害
回复
zjz800800 2009-08-05
后面的兄弟们,对不起,没分了,结贴后看到kinsan的方法,感谢中...以后有机会给你补分吧^_^
回复
waiting4ufo 2009-08-05
>2。16 即 16进制的 10, 这个1向左移10位,得到的数即16的10次方。 注此时得到的是16进制, 可不是2进制。
上面这个有点疏忽了
16进制的 10 , 即已经是16的1次方了, 所以 那个1向左移9位, 即16的10次方。

即 可得到 10000000000(16进制)。
回复
waiting4ufo 2009-08-05
1。思想: 1的ascii码转换成2进制写出来,数1的个数。
程序: C++ 定义 char型 char c = '1'; c里面的数值即1的ascii吗。 char类型占1字节,1字节8位,把这个字节的每个位取出来 看是不是1。 1个字节的某一“位”怎样得到呢?
例如 取得某字节的第2位, 那么
c >>2; // 第2位就右移到了最低位上
c & 0x01; // 得到的数值就是要得的值
(.net内部用unicode码 因此char类型不是1个字节 须注意)

2。16 即 16进制的 10, 这个1向左移10位,得到的数即16的10次方。 注此时得到的是16进制, 可不是2进制。
回复
zjz800800 2009-08-05
谢谢大家关注,开始结贴
回复
wcqqq 2009-08-05
[Quote=引用 123 楼 gcc_gun 的回复:]
引用 113 楼 wuchangqian537 的回复:
1111!=1618563072641785874554782335091155579034281514777647522807432839314543010390750
//这个里面有255个1(以十进制表示)
第二题简单 1 < <40 = 1099511627776(以十进制表示)

用matlab算的吧?
[/Quote]
求1111!是自己用c语言模拟实现,代码在86楼,而求出1个个数为255共用了两种方法:
先将结果保存到一个文件result中
第一种:vim编辑器 %s/1/&/g 指令可以实现(225 substitutions on 1 line)
第二种:sed 's/1/\n/g' result | wc -l 这个值减1就可以
另外,python的代码在111楼,
回复
zwnewton 2009-08-05
说一下过程吧。
1111!,1111×1110×1109×。。。,只要后面的乘数是10的倍数,那么对1的个数就没影响,所以1110就不用考虑了,而1109%10=9,只有这个9会对1的个数产生影响。我们可以把后面的乘数先乘起来,只要有10的整数倍就舍去,也就是说只取除10的余数。1111×(9×8×7×6×。。。。)×(1100×1099×1098×。。。)×。。。,后面的括号中都是这么处理,只取%10的余数。结果是没有1.

16^10=2^4*10=2^40=1G,我前面算错了。
回复
zwnewton 2009-08-05
我知道,第一题是0个1;
第二题是16M;
哈哈;
回复
瑞大 2009-08-05
有学java的么,第一题用BigDecimal很容易的,可以计算任何位的数
回复
发动态
发帖子
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……