心得(new,if短路原理)

new[](new的数组版)要求元素对象的类型必须具有默认构造函数(内建类型的“默认构造函数”是什么也不做),否则将不能使用new[]。

???突然发现,这道题何必用new?用vector<ID> id不是很好吗?

题目描述

一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下:
首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};然后将计算的和对11取模得到值Z;最后按照以下关系对应Z值与校验码M的值:

Z:0 1 2 3 4 5 6 7 8 9 10
M:1 0 X 9 8 7 6 5 4 3 2

现在给定一些身份证号码,请你验证校验码的有效性,并输出有问题的号码。

输入描述:
输入第一行给出正整数N(<= 100)是输入的身份证号码的个数。随后N行,每行给出1个18位身份证号码。

输出描述:
按照输入的顺序每行输出1个有问题的身份证号码。这里并不检验前17位是否合理,只检查前17位是否全为数字且最后1位校验码计算准确。如果所有号码都正常,则输出“All passed”。

输入例子:
4
320124198808240056
12010X198901011234
110108196711301866
37070419881216001X

输出例子:
12010X198901011234
110108196711301866
37070419881216001X

代码

使用了短路原理:
92行:printCount == 0 && cout << "All passed";
相当于: if (printCount == 0)cout << "All passed";

#include<iostream>
#include<string>
using namespace std;int WEIGHT[] = { 7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2 };class ID
{public:string num;int intNum[18] = { -1 };bool valid = true;void input(string);void checkChar();void checkNum();
};//函数
void ID::input(string str)
{this->num = str;
}
//判断是否纯数字
void ID::checkChar()
{int i;for (i = 0; i < 17; i++){if (this->num[i] < '0' || this->num[i] >'9'){this->valid = false;return;}this->intNum[i] = this->num[i] - 48;}
}
//判断最后一位是否正确
void ID::checkNum()
{int i;int sum = 0;for (i = 0; i < 17; i++){sum += this->intNum[i] * WEIGHT[i];}sum %= 11;switch (sum){case 0:if (this->num[17] == '1')break;case 1:if (this->num[17] == '0')break;case 2:if (this->num[17] == 'X')break;case 3:if (this->num[17] == '9')break;case 4:if (this->num[17] == '8')break;case 5:if (this->num[17] == '7')break;case 6:if (this->num[17] == '6')break;case 7:if (this->num[17] == '5')break;case 8:if (this->num[17] == '4')break;case 9:if (this->num[17] == '3')break;case 10:if (this->num[17] == '2')break;default:this->valid = false;}
}int main()
{int total;cin >> total;ID *pID = new ID[total];int i;string str;for (i = 0; i < total; i++){cin >> str;(pID + i)->input(str);(pID + i)->checkChar();if ((pID + i)->valid == false)continue;//这里玩一下短路(pID + i)->checkNum();}int printCount = 0;for (i = 0; i < total; i++){if ((pID + i)->valid == false){cout << (pID + i)->num << endl;printCount++;}}printCount == 0 && cout << "All passed";system("pause");
}

牛客网_PAT乙级_1031. 查验身份证(15)【class new一个数组】相关推荐

  1. 牛客网_PAT乙级_1016程序运行时间(15)

    心得 格式化输出的语法是这样的:printf("%02d:%02d:%02d", hour, min, sec); 输出效果举个例子:00:04:59,不足两位的情况下补0 不知道 ...

  2. 牛客网_PAT乙级_1019. 数字黑洞 (20)

    总结 注意!! 想要在函数中结束程序,一定不要用system("pause");,因为这样只是让程序暂停,结果就是运行时间超时,无法通过所有的测试用例. 那么,C++ 程序中什么函 ...

  3. 牛客网_PAT乙级_1010月饼 (25)

    因为黑框框里放不下,(非官网)测试用例用txt导入: 这题有一个陷阱,官网上说给非0数,测试用例却出现了0,0吨的月饼能卖507元,而且这样的月饼要最先卖,因为它的price是inf,卖掉0吨净赚50 ...

  4. 牛客网_PAT乙级_1029有几个PAT(25)【输入字符串并strlen计算长度】

    题目描述 字符串APPAPT中包含了两个单词"PAT",其中第一个PAT是第2位§,第4位(A),第6位(T):第二个PAT是第3位§,第4位(A),第6位(T). 现给定字符串, ...

  5. 牛客网_PAT乙级_1028到底买不买(20)【用iterator迭代器,对两个vectorchar比较,删除相同元素】

    题目描述 小红想买些珠子做一串自己喜欢的珠串.卖珠子的摊主有很多串五颜六色的珠串,但是不肯把任何一串拆散了卖.于是小红要你帮忙判断一下,某串珠子里是否包含了全部自己想要的珠子?如果是,那么告诉她有多少 ...

  6. 牛客网_PAT乙级_1027在霍格沃茨找零钱(20)

    题目描述 如果你是哈利·波特迷,你会知道魔法世界有它自己的货币系统 -- 就如海格告诉哈利的:"十七个银西可(Sickle)兑一个加隆(Galleon),二十九个纳特(Knut)兑一个西可, ...

  7. 牛客网_PAT乙级_1025插入与归并(25)

    题目描述 根据维基百科的定义: 插入排序是迭代算法,逐一获得输入数据,逐步产生有序的输出序列.每步迭代中,算法从输入序列中取出一元素,将之插入有序序列中正确的位置.如此迭代直到全部元素有序. 归并排序 ...

  8. 牛客网_PAT乙级_1026跟奥巴马一起编程(15)

    题目描述 美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统.2014年底,为庆祝"计算 机科学教育周"正式启动,奥巴马编写了很简 ...

  9. 牛客网_PAT乙级_10234有理数四则运算(20)【通过5/7:格式错误】

    题目描述 本题要求编写程序,计算2个有理数的和.差.积.商. 输入描述: 输入在一行中按照"a1/b1 a2/b2"的格式给出两个分数形式的有理数,其中分子和分母全是整型范围内的整 ...

最新文章

  1. 我热爱计算机作文500字,电脑吸引了我
  2. 积跬步以至千里_积跬步以至千里,聚小利终成大户
  3. IT技术人生路之我的大学--我技术方向的转变
  4. 24.两两交换链表中的结点
  5. Docker初学乍练之单主机网络
  6. 红黑树 java代码实现
  7. Genome Research封面文章|张勇课题组开发方法绘制胚胎发育早期转录因子结合位点图谱...
  8. python万年历时钟_python实现万年历类calendar
  9. python解包wxapkg_微信小程序wxapkg解包器c++版(免装py环境 绿色90k)
  10. expdp导出 schema_[转载]导入导出:impdpexpdp
  11. 超星学习通 吉林大学 程序设计基础 实验07 递归程序设计(2022级)
  12. Python求解平方怪圈问题
  13. 带你玩转以太坊智能合约的Hello World
  14. nvivo三天写论文!可视化操作实战
  15. CSDN删除上传资源操作
  16. 【BZOJ3168】[Heoi2013]钙铁锌硒维生素 高斯消元求矩阵的逆+匈牙利算法
  17. 10亿以内的阿拉伯数字转文字
  18. 有限元基础及ANSYS应用 - 第9节 - 2 平面应变问题的ANSYS分析
  19. Linux挂载移动群晖硬盘,通过USB移动硬盘盒挂载群晖格式硬盘的方法
  20. 蚂蚁金服通讯框架学习一

热门文章

  1. UVA225Golygons 黄金图形
  2. python高级语法-高阶函数之map的使用方法
  3. BZOJ3209(n的二进制表示中1的个数的乘积)
  4. 梅朵是藏语鲜花的意思
  5. 模拟赛-20190114-新魔法(distance)
  6. 10.OD-强制在OEP前加载dll
  7. 详细解析Raid0、Raid0+1、Raid1、Raid5四者的区别
  8. DDoS攻击原理及防护方法论
  9. RabbitMQ之监控(3)
  10. Netflix 工程师的生活 —— 40毫秒的案例