"stdio.h"
void
main()
{
int
i
/*身份z的第i位*/
int
s[17]
/*定义一个数组用来存放身份z的前17位*/
int
t[17]
/*各位相乘后的数组*/
int
m
/*余数*/
int
t18
/*身份z的第18位0--9*/
char
t18c
/*身份z的第18位X*/
long
int
sum=0
for(i=0i<17i++)
{
printf("请输入身份z的第%d位:",i+1)
scanf("%d",&s[i])
switch(i+1)
{
/*身份z的1到17位要乘的数一次是7
9
10
5
8
4
2
1
6
3
7
9
10
5
8
4
2
*/
case
1:t[i]=s[i]*7break
case
2:t[i]=s[i]*9break
case
3:t[i]=s[i]*10break
case
4:t[i]=s[i]*5break
case
5:t[i]=s[i]*8break
case
6:t[i]=s[i]*4break
case
7:t[i]=s[i]*2break
case
8:t[i]=s[i]*1break
case
9:t[i]=s[i]*6break
case
10:t[i]=s[i]*3break
case
11:t[i]=s[i]*7break
case
12:t[i]=s[i]*9break
case
13:t[i]=s[i]*10break
case
14:t[i]=s[i]*5break
case
15:t[i]=s[i]*8break
case
16:t[i]=s[i]*4break
case
17:t[i]=s[i]*2break
}
sum=sum+t[i]
}
printf("前17位相乘后的和为%ld\n",sum)
m=sum%17
printf("对17取余后的值位:",m)
switch(m)
{
/*各个余数所对应第18位身份z号1
0
X
9
8
7
6
5
4
3
2*/
case
0:t18=1
printf("这是一个合法的身份z号码,第18位是%d",t18)break
case
1:t18=0
printf("这是一个合法的身份z号码,第18位是%d",t18)break
case
2:t18c='X'printf("这是一个合法的身份z号码,第18位是%c",t18c)break
case
3:t18=9
printf("这是一个合法的身份z号码,第18位是%d",t18)break
case
4:t18=8
printf("这是一个合法的身份z号码,第18位是%d",t18)break
case
5:t18=7
printf("这是一个合法的身份z号码,第18位是%d",t18)break
case
6:t18=6
printf("这是一个合法的身份z号码,第18位是%d",t18)break
case
7:t18=5
printf("这是一个合法的身份z号码,第18位是%d",t18)break
case
8:t18=4
printf("这是一个合法的身份z号码,第18位是%d",t18)break
case
9:t18=3
printf("这是一个合法的身份z号码,第18位是%d",t18)break
case
10:t18=2
printf("这是一个合法的身份z号码,第18位是%d",t18)break
default:printf("这不是一个合法的身份z号码")
}
printf("\n")
}
第一题:
void main()
{
int n,sum
n=20
sum=0
sum=fun(n)
printf("%ld\n",sum)
return
}
long fun(int n)
{
int i
long tmp
i=1
while(i<=n){
tmp+=i*i
i++
}
return tmp
}
第二题:
void main()
{
int n
n=1000
fun(n)
return
}
void fun(int n)
{
int i,sum,tmp
for(int i=1i<ni++){ //这里是找1到n之间的水仙数。当然你可以找任意区间的水仙数,只要改变下i的循环数即可。
tmp=i
sum=0
while(tmp>0){
sum = sum + (tmp%10)*(tmp%10)
tmp=tmp/10
}
if(sum==i){
printf("%d\n",i)
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)