• 主页
• 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

1: 1111！ 4个1 加 一个！，答案是4
2: 16的10次方 = 16的10次方

space_ngc1275 2009-08-06
[Quote=引用楼主 zjz800800 的回复:]
1.求出1111!中有多少个1
2.求16的10次方
[/Quote]

kxscr 2009-08-06

weiyulin 2009-08-06

1.求出1111!中有多少个1

2.求16的10次方
16 ^ 10

leoizumi 2009-08-06

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

public class TongJi {

protected static ArrayList alist=new ArrayList();

static {
}

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));
}
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+"次");

}

}

-------------------------------------------------

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 的回复:]

[/Quote]

zjz800800 2009-08-05

waiting4ufo 2009-08-05
>2。16 即 16进制的 10, 这个1向左移10位，得到的数即16的10次方。 注此时得到的是16进制， 可不是2进制。

16进制的 10 ， 即已经是16的1次方了， 所以 那个1向左移9位， 即16的10次方。

waiting4ufo 2009-08-05
1。思想： 1的ascii码转换成2进制写出来，数1的个数。

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 的回复:]

1111!=1618563072641785874554782335091155579034281514777647522807432839314543010390750
//这个里面有255个1（以十进制表示）

[/Quote]

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

VC/MFC

1.5w+

VC/MFC相关问题讨论

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