数的处理
- 对数位的操作
(1) 求整数各位之和
int GetGigitSum(int number)
{
int sum=0;
while(number)
{
sum=number%10;
number/=10;
}
return sum;
}
(2) 进制之间转换
- 将某n进制数转化为十进制数
void func1(int x, int n)
{
int y = 0; //y为要转化的十进制数
int product = 1; // 幂次
while (x != 0)
{
y = y + (x % 10)*product;
x /= 10;
product *= n;
}
}
- 将十进制数转化为某m进制数
void func2(int y, int m)
{
int z[40], num = 0; // z存放转换为m进制的数
do {
z[num++] = y % m;
y /= m;
} while (y != 0);
}
附: 一个实现任意进制转化的函数,并且测试代码
#include<iostream>
#include<string>
#include<cstring>
using namespace std;
//任意进制之间的转换
/**
* s1 转换之前的数
* s2 转换之后的数
* d1 原进制数
* d2 需要转到的进制数
* 高于9的位数用大写'A'~'Z'表示,2~16位进制通过验证
*/
void conversion(string s1, string &s2, long int d1, long int d2) {
//思路,还是将原数转换成十进制数 -> 再由十进制数转换成目标进制的数
long int i, j, t, num;
char c;
num = 0;
//先转换成十进制数
for (i = 0; i < s1.size(); i++) {
if (s1[i] >= '0'&&s1[i] <= '9') {
t = s1[i] - '0';
}
else t = s1[i] - 'A' + 10;
//参考十进制的方式
num = num * d1 + t;
}
i = 0;
s2 = "";
while (1) {
t = num % d2;
num /= d2;
if (t <= 9)s2 = to_string(t) + s2;
else s2 = (char)((t - 10 + 'A')) + s2;
if (num == 0) break;
}
}
//测试函数
int main() {
string str1, str2;
long int d1, d2;
while (cin >> str1 >> d1 >> d2) {
conversion(str1, str2, d1, d2);
cout << str2 << endl;
}
return 0;
}
- 判断数字的奇偶性
(1)
bool func1(int n)
{
if(n%2==1) return false;
else return true;
}
(2)
bool func2(int n)
{
if(n & 0x1 ==1) return false;
else return true;
}
- 浮点数比较大小
bool equal(double a, double b) { // or float
if ((a- b> -0.000001) && (a- b) < 0.000001)
return true;
else
return false;
}
浮点数比较大小应该在一定的区间内;equal函数由自己编写
- 分数
(1)分数的表示
struct fraction{
int up,down; // up 分子 down 分母
};
(2)分数的化简,约分
主要处理以下几种情况:
-
如果分母是负数
-
如果分子为0
-
约分,找出,分子分母的最大公约数,同时相除;
.
int gcd(int a,int b)
{
if(b==0) return a;
else return gcd(b,a%b);
}
struct fraction{
int up,down; // up 分子 down 分母
};
fraction reduction(fraction result)
{
if(result.down<0)
{
result.down=-result.down;
result.up=-result.up;
}
if(result.up==0)
{
result.down=1;
}
else{
int d=gcd(abs(result.down),abs(result.up));
result.down/=d;
result.up/=d;
}
return result;
}
(3)分数的加减乘除
遵从相应的法则即可,最后输出 return func(fraction) // func为化简函数