Problem A: 级数求和
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 409 Solved: 240
Description
已知:Sn= 1+1/2+1/3+…+1/n。显然对于任意一个整数K,当n足够大的时候,Sn大于K。
现给出一个整数K(1<=k<=15),要求计算出一个最小的n;使得Sn>K。
Input
键盘输入 k
Output
屏幕输出 n
Sample Input
1
Sample Output
2
【思路】
直接模拟
#include <iostream>
using namespace std;
int main()
{
int m;
cin >> m;
while(m--){
int k, n = ;
double sum = ;
cin >> k;
while() {
sum += double(/double(n));
if(sum > k) break;
n++;
}
cout << n << endl;
}
return ;
}
Problem B: 进制转换
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 321 Solved: 78
Description
将一个二进制数转换为十进制数输出。
Input
首先输入一个整数n,表示测试实例的个数。接下来是n行,每行一个01串(长度不超过60),表示一个二进制数。
Output
输出n行。对应每一行输入,输出其对应的十进制数整数。
Sample Input
2
1101
1100111
Sample Output
13
103
【思路】
注意定义 long long 类型,赋值输出为 %lld,最大可读入18位整数,需用Dev,Dev下载地址。
若在VC 6.0中,则用__int64,赋值输出为%I64d。
#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
int main(){
int n;
cin >> n;
while(n--){
long long sum = ,ac = ;
int i,j;
char a[];
cin >> a;
int temp = strlen(a);
for(i = ,j = temp - ;i < temp;i++,j--){
ac = pow(,i);
if(a[j] == ''){
sum += ac;
}
}
cout << sum << endl;
}
return ;
}
【candy】