%与/
众所周知,编程语言里有一个’%'运算符,和数学里的%不同,它是用来取余数的,请看下面程序:
#include<iostream>
using namespace std;
int main()
{
cout << "10 / 3 = " << 10 / 3 << "......" << 10 % 3 << endl;
return 0;
}
得到的输出是:
10 / 3 = 3......1
--------------------------------
Process exited after 0.4385 seconds with return value 0
请按任意键继续. . .
(Dev C++)
从这里可以看出,10 / 3 = 3.333…的小数点后半部分没了,这是因为int只读取到第一个不是数字的数,而10 % 3很明显就是10 - int(10 / 3) * 3
以300000200001010000为例,首先得把300000去掉。
去除
很明显,我们只要后面的,所以应该300000200001010000 % 100000000000,得到余数200001010000,然后我们只要前面的,所以应该200001010000 / 10000得到20000101,这样,就完成了大半。
然后制作函数getBirthdayNumberFromID()
long getBirthdayNumberFromID(long id)
{
long a = id % 1000000000000;
long b = a / 10000;
return b;
}
储存
紧接着,我们要对其进行储存。
struct Birthday
{
int y,m,d;
};
这需要一个新的函数进行储存——getBirthdayFromBirthdayNumber()
Birthday getBirthdayFromBirthdayNumber(long b)
{
Birthday birthday = {b / 10000,b % 10000 / 100,b % 10000 % 100};
return birthday;
}
这样就可以用
Birthday b = getBirthdayFromBirthdayNumber(getBirthdayNumberFromID(300000200001010000));
cout << b.yb.y << "-" << b.m << "-" << b.d;
进行输出了…等等,我还有更简单的方法,没错,就是运算符重载!
struct Birthday
{
int y,m,d;
friend ostream& operator<<(ostream& os,Birthday& b)
{
os << b.y << "-" << b.m << "-" << b.d;
return os;
}
};
源码
经过一番改进,最后成品如下:
#include<iostream>
using namespace std;
struct Birthday
{
int y,m,d;
friend ostream& operator<<(ostream& os,Birthday& b)
{
os << b.y << "-" << b.m << "-" << b.d;
return os;
}
operator long()
{
return y * 10000 + m * 100 + d;
}
};
long getBirthdayNumberFromID(long);
Birthday getBirthdayFromBirthdayNumber(long);
Birthday getBirthdayFromID(long);
int main()
{
return 0;
}
long getBirthdayNumberFromID(long id)
{
long a = id % 1000000000000;
long b = a / 10000;
return b;
}
Birthday getBirthdayFromBirthdayNumber(long b)
{
Birthday birthday = {b / 10000,b % 10000 / 100,b % 10000 % 100};
return birthday;
}
Birthday getBirthdayFromID(long id)
{
return getBirthdayFromBirthdayNumber(getBirthdayNumberFromID(id));
}
总结
- 截取整数前半部分
整数 / 从第几位结束
12345 / 100 => 123
- 截取整数后半部分
整数 % 从第几位开始+1
12345 % 1000 => 345