希望有个完整程序!我只会一个一个硬算,可以在关键部分写一下注释嘛,学习真的艰难。
3条回答 默认 最新
- 技术专家团-小桥流水 2022-12-11 13:34关注
运行结果:
代码:
#include <stdio.h> //判断是否是数字字符 int isNumber(char c) { if(c>='0' && c<='9') return 1; else return 0; } //11010519491231002x //将p中的n个字符转换为数字,比如p="12345",n=2,则取前2位输出12 int trans(char* p,int n) { int s = 0,i; for(i=0;i<n;i++) { if(isNumber(p[i])) s = s*10 + (p[i]-'0'); else return -1; //非数字 } return s; } int main() { char str[20]={0}; int qz[18]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1}; int i = 0; int year = 0,month=0,day = 0; char* p = str; //指针指向输入的字符串 int sum = 0; int yzm[] ={'1','0','X','9','8','7','6','5','4','3','2'}; scanf("%s",str); //得到字符串 for(i=0;i<17;i++)//处理前17个字符 { if(isNumber(str[i])==0)//如果不是数字字符说明不合法 { printf("wrong\n"); return 0; }else { sum += (str[i] -'0') * qz[i]; //数字位乘以对应的权值求和 } } sum = sum%11; //求除以11的余数 year = trans(p+6,4); //得到年份 month = trans(p+10,2);//得到月 day = trans(p+12,2);//得到日 if(str[17]=='x') //将小写的x转成大写X,避免误判,因为上面字符数组中定义的是X str[17] = 'X'; if(yzm[sum] == str[17] ) printf("correct,出生年月为: %d年%d月%d日\n",year,month,day); else printf("wrong\n"); return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥15 Llama如何调用shell或者Python
- ¥20 谁能帮我挨个解读这个php语言编的代码什么意思?
- ¥15 win10权限管理,限制普通用户使用删除功能
- ¥15 minnio内存占用过大,内存没被回收(Windows环境)
- ¥65 抖音咸鱼付款链接转码支付宝
- ¥15 ubuntu22.04上安装ursim-3.15.8.106339遇到的问题
- ¥15 blast算法(相关搜索:数据库)
- ¥15 请问有人会紧聚焦相关的matlab知识嘛?
- ¥15 网络通信安全解决方案
- ¥50 yalmip+Gurobi