C++从身份证号获取生日

%与/

众所周知,编程语言里有一个’%'运算符,和数学里的%不同,它是用来取余数的,请看下面程序:

#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));
}

总结

  1. 截取整数前半部分
整数 / 从第几位结束
12345 / 100 => 123
  1. 截取整数后半部分
整数 % 从第几位开始+1
12345 % 1000 => 345
上一篇:对象下—练习3


下一篇:属性类型