第16题
这个题是求 21000 在十进制表示下各位数字的和。
我没想到很好的算法,只想到一个 O(n2) 的高精度处理,直接求出结果,再一位一位加起来。
int main(){
int num[1000],len=0;
num[0]=1;
for (int i=1;i<=1000;i++){
int tmp=0;
for (int j=0;j<=len;j++){
num[j]<<=1;
if(tmp==1){
tmp=0;
num[j]++;
}
if (num[j]>9){
num[j]-=10;tmp=1;
}
}
if (tmp) num[++len]=1;
}
int ans=0;
for (int i=0;i<=len;i++) ans+=num[i];
cout<<ans<<endl;
return 0;
}
第17题
题目求的是1-1000这1000个数用英文表示出来总共有多少个字母。
这个题是我手算的,并没有写代码。我觉得这时候写代码反而是一个吃力不讨好的过程。感觉这题可以给差评了。
容易发现:
1,2,3,……,98,99这99个数是每一百个数就要出现一次的,所以一共出现了10次,答案是