对于常见数字类型的操作
注意下面这些例子中都是int,int数据类型的取值范围为-2147483648~2147483647() ,约为-2.15亿到2.15亿
1.提取整数的每一位
(1)利用整数取余
利用整数取余,取余后再除以10,循环直到变成0
#include <iostream>
using namespace std;
int Weishu(int n)//计算整数的位数
{
if (n == 0) { return 0; }
else
{
int count = 0;
while (n)
{
n = n / 10;
++count;
}
return count;
}
}
int main()
{
int n;
cin >> n;
int weishu = Weishu(n);
int* shu=new int[weishu];//创建一个存入每一位数的整数组
int tem = n; int t = 0;
while (tem)//逆序取出并存入整数的每一位
{
shu[t] = tem % 10;
tem = tem / 10;
++t;
}
delete[] shu;
return 0;
}
(2)利用to_string函数
to_string
是C++标准库中的一个函数,用于将各种基本数
据类型转换为对应的字符串表示
#include <iostream>
#include <string>//要带头文件
using namespace std;
int main()
{
int n;
cin >> n;
string str = to_string(n);
cout << str;//存入后数字的顺序不会改变,要访问某一位与数组访问元素类似,使用str[i]
return 0;
}
2.求逆序数
模10取出最后一位,并不断左移一位
#include <iostream>
using namespace std;
int Reverse(int n)//逆序函数
{
int rev = 0;
while (n)
{
rev = n % 10 + rev * 10;//n不断降,rev不断升
n = n / 10;
}
return rev;//如果n正好是10的整数倍,n最后的0会在rev前省略
}
int main()
{
int n;
cin >> n;
cout << Reverse(n);
return 0;
}
3.判断素数
素数:质数又称素数。一个大于1的自然数,除了1和它自身外,不能 被其他自然数整除的数叫做质数
bool isPrime(int n) {
if (n <= 1) return false;
int aqr = (int)sqrt(1.0 * n);
for (int i = 2; i <= aqr; i++)
{
if(n% i == 0) return false;
}
return true;
}
4.回文数
一个数字无论从左到右读还是从右向左读,都是相同的
bool hws(int n)
{
int ans=0,m=n;
while(m>0)
{
ans=ans*10+m%10;
m/=10;
}
return ans==n;
}
5.完全数
一个数等于它的所有真因子之和。例如,6是一个完全数,因为6的真因子是1、2、3,而1+2+3=6。
bool perfect_num(int x) {
//初始化flag
bool flag = false;
//初始化所有因子之和
int sum = 0;
//遍历从1到x的所有整数
for (int i = 1; i < x; ++i) {
//判断是否为因子
if (x % i == 0) {
sum += i;
}
}
//更新flag
flag = (sum == x);
return flag;
}
;