题目描述
手机号是一个11位长的数字串。同时,大家可以申请加入校园网,如果加入成功,你将另外拥有一个短号。假设所有的短号都是是 6+手机号的后5位,比如号码为13512345678的手机,对应的短号就是645678。
自定义函数,参数为手机号(字符串),该手机号为合法手机号,则计算该手机号的短号,并用数组传回。返回1;否则返回0。主函数定义两个串,手机号串和短号串,调用该函数,输出error或得到的短号。
合法手机号判断:11位数字,前三位为:
中国电信:133,153, 180,181,189
中国联通:130,131,132,155,156
中国移动:134,135,136,137,138,182,183,184
(为简化,上述三位数字省去了一些。)
输入
第一行:测试次数
每组测试数据一行,手机号
输出
对每组测试数据,调用函数,根据返回结果,若为1,输出对应短号;若为0,输出error。
IO模式
本题IO模式为标准输入/输出(Standard IO),你需要从标准输入流中读入数据,并将答案输出至标准输出流中。

代码如下:
#include <stdio.h>
char n[12];
int short_number();
int main(){
int t;
scanf("%d",&t);
getchar();
while(t--){
gets(n);
if(!short_number())
printf("error");
else{
printf("6");
for(int i=6;i<11;i++)
printf("%c",n[i]);
}
if(t>0)
printf("\n");
for(int i=0;i<12;i++)
n[i]='a';
}
return 0;
}
int short_number(){
int n3=n[2]-'0';
if(!n[11]=='\0')
return 0;
for(int i=0;i<11;i++)
if(!(n[i]>='0'&&n[i]<='9'))
return 0;
if(n[0]!='1')
return 0;
if(n[1]!='3'&&n[1]!='5'&&n[1]!='8')
return 0;
if(n[1]=='3'&&n3==9)
return 0;
if(n[1]=='5')
if(n3==3||n3==5||n3==6)
return 1;
else
return 0;
if(n[1]=='8')
if(n3==1||n3==2||n3==3||n3==4||n3==9)
return 1;
else
return 0;
return 1;
}
我这应该是个比较特殊的方法,分别判断手机号的前三位数是否合法,而不是把它们放在一个数组里进行遍历(原本是想省点事结果没省成咳咳
注意必须是十一位数且每一位都必须是数字!
1502

被折叠的 条评论
为什么被折叠?



