整数反转
输入一个有符号整数,输出该整数的反转值。
输入描述:
一个整数
输出描述:
一个整数
输入例子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;
}