整数反转、整数求和

整数反转

输入一个有符号整数,输出该整数的反转值。 

输入描述:

一个整数

输出描述:

一个整数

输入例子1:

123

输出例子1:

321

输入例子2:

-123

输出例子2:

-321

输入例子3:

200

输出例子3:

2
#include <iostream>
using namespace std;

#define INT_MAX 2147483647
#define INT_MIN (-INT_MAX-1)
int reverse(int x)
{
    if(x==0||x==1) return x;
    else
    {
        int flag=x<0?-1:1;
        int num=0;
         while(x)
        {
            if((flag==-1&&(INT_MIN/10>num))||(flag==1&&INT_MAX/10<num))
            return 0;
            num=num*10+x%10;
            x/=10;
        }
        return num;
    }
}
int main()
{
    int x;
    cin>>x;
    cout<<reverse(x)<<endl;
}

整数求和

给定整数n,取若干个1到n的整数可求和等于整数m,编程求出所有组合的个数。比如当n=6,m=8时,有四种组合:[2,6], [3,5], [1,2,5], [1,3,4]。限定n和m小于120

输入描述:

整数n和m

输出描述:

求和等于m的所有组合的个数。

输入例子1:

6 8

输出例子1:

4
#include <iostream>

using namespace std;
//整数求和
int arr[200][200]={0};
int get(int n, int m)
{
	arr[0][0] = 1;
	for (int k = 1; k <= m; ++k)
		arr[0][k] = 0;
	for (int k = 1; k <= n; ++k)
		arr[k][0] = 1;
	//arr[i][j]表示:从1,2,...,i-1,i取若干个整数求和等于整数j的组合的个数
	for (int j = 1; j <= m; ++j)
	for (int i = 1; i <= n; ++i)
	if ((j - i) >= 0)
		arr[i][j] = arr[i - 1][j] + arr[i - 1][j - i];
	else
		arr[i][j] = arr[i - 1][j];

	return arr[n][m];
}
int main()
{
	int n, m;
	cin >> n >> m;
	cout<<get(n, m)<<endl;
	return 0;
}

猜你喜欢

转载自blog.csdn.net/Aspiration_1314/article/details/86499551