附上在线IDE http://www.shucunwang.com/RunCode/cpp/
1 求1000以内所有3或5的倍数的和
#include
using namespace std;
int main() {
int sum = 0;
for(int i=0; i<1000; ++i)
{
if(i%3==0 || i%5==0)
{
sum += i;
}
}
cout << "sum:" << sum << endl;
return 0;
}
2 斐波那契数列中不超过四百万的项,求其中为偶数的项之和
#include
using namespace std;
int fibonacci(int first, int second, int& total_sum)
{
if(first <= 4000000)
{
int tmp_sum = first + second;
total_sum += first%2==0?first:0;
return fibonacci(second, tmp_sum, total_sum);
}
return first;
}
int main() {
int sum = 0;
fibonacci(1,2,sum);
cout << "even-sum:" << sum << endl;
return 0;
}
3 600851475143最大的质因数是多少
#include
using namespace std;
int largest_prime_factor(long n)
{
int min = 2;
while (n > min) {
for (int i = min; i <= n; i++) {
if (n % i == 0) {
n = n / i;
min = i;
break;
}
}
}
return min;
}
int main() {
int max_prime_factor = largest_prime_factor(600851475143);
cout << "max:" << max_prime_factor << endl;
return 0;
}
4 由两个3位数相乘得到的最大回文乘积
#include
#include
using namespace std;
bool is_palindromic(int num)
{
std::ostringstream out;
out << num;
string num_str = out.str();
int max_size = num_str.size();
for(int i=0; i=1; --i)
{
for(int j=999; j>=1; --j)
{
int mul_nm = i*j;
bool is_palindromic_num = is_palindromic(mul_nm);
if(is_palindromic_num)
{
max = mul_nm > max ? mul_nm : max;
}
}
}
return max;
}
int main()
{
int max_palindromic = get_max_palindromic();
cout << "result:" << max_palindromic << endl;
return 0;
}
5. 最小的能够被1到20整除的正数--最小倍数
#include
#include
6.平方的和与和的平方之差
#include
#include
#include
using namespace std;
int main()
{
int square_sum = 0;
int sum_square = 0;
for(int i=1; i<=100; ++i)
{
square_sum += pow(i*1.0,2);
sum_square += i;
}
sum_square = pow(sum_square*1.0,2);
int diff_val = abs(square_sum - sum_square);
cout << "diff value: " << diff_val << endl;
return 0;
}
#include
#include
using namespace std;
int get_prime(int n)
{
int *p_r = new int[n];
int count = 1;
p_r[0] = 2;
p_r[1] = 3;
for(int i=3; count!=n; i+=2)
{
int sqrt_i = floor(sqrt(i*1.0));
int j = 1;
for(j=1; sqrt_i>=p_r[j] && i%p_r[j]!=0; ++j);
if(sqrt_i
8.连续数字最大乘积
#include
#include
#include
using namespace std;
//找出连续n位最大的字符串
long get_max_num(const string& src, int n)
{
if (src.empty())
{
return 0;
}
string max_str = src.substr(0, n);
for (int idx=1; idx
#include
#include
using namespace std;
int main() {
int num1,num2,num3;
for(int i=1; i<1000; ++i)
{
for(int j=1;j<1000; ++j)
{
int tmp = i*i + j*j;
int k = sqrt(1.0*tmp);
if(i+j+k == 1000 && tmp==k*k && i
#include
#include
using namespace std;
bool is_prime(int num)
{
if (num < 2)
{
return false;
}
int tmp = sqrt(1.0*num);
for (int i=2; i<=tmp; ++i)
{
if (num%i == 0)
{
return false;
}
}
return true;
}
int main() {
long long sum = 0;
for (int i=2; i<=2000000; ++i)
{
if (is_prime(i))
{
sum += i;
}
}
cout << "sum:" << sum << endl;
return 0;
}