两种尝试:
1.到网上搜了一下能被7整除的数的特征:用一个数的最末一位数字的2倍减去原数去掉末位后所得到的数的差的绝对值,如果能被7整除,那这个数就能被7整除,(如果为零当然一样了) 但由于楼主所给的数太大,就算有了其他算法,但是仍然解决不了数冗长的问题;
2.这时候不妨将我们的对7做除法的过程进行分解然后让计算机去做;也就是7楼的算法:先预读计算机能够识别的位数对7进行取余运算,将所得的余数作为最高位与下面的数组合之后继续对7进行取余,直至取余之后与最后一位数相同;程序如下:
#include"stdio.h"
#include"conio.h"
void main()
{
char ch;
int sum=0,i,ln=0,t;
printf("please input the ticket number:");
ch=getch();
printf("%c",ch);
for(i=0;ch!=13;i++)
{
t=sum;//t用来记住输入最后一个数字之前的余数
ln=ch-'0';//用来记住最后一个数
sum=sum*10+ch-'0';
sum=sum%7;
ch=getch();
printf("%c",ch);
}
printf("\n");
if((ln-t)%7==0)
printf("valid!");
else
printf("invalid!");
}
[ 本帖最后由 doubleflygo 于 2010-2-18 10:04 编辑 ]
1.到网上搜了一下能被7整除的数的特征:用一个数的最末一位数字的2倍减去原数去掉末位后所得到的数的差的绝对值,如果能被7整除,那这个数就能被7整除,(如果为零当然一样了) 但由于楼主所给的数太大,就算有了其他算法,但是仍然解决不了数冗长的问题;
2.这时候不妨将我们的对7做除法的过程进行分解然后让计算机去做;也就是7楼的算法:先预读计算机能够识别的位数对7进行取余运算,将所得的余数作为最高位与下面的数组合之后继续对7进行取余,直至取余之后与最后一位数相同;程序如下:
#include"stdio.h"
#include"conio.h"
void main()
{
char ch;
int sum=0,i,ln=0,t;
printf("please input the ticket number:");
ch=getch();
printf("%c",ch);
for(i=0;ch!=13;i++)
{
t=sum;//t用来记住输入最后一个数字之前的余数
ln=ch-'0';//用来记住最后一个数
sum=sum*10+ch-'0';
sum=sum%7;
ch=getch();
printf("%c",ch);
}
printf("\n");
if((ln-t)%7==0)
printf("valid!");
else
printf("invalid!");
}
[ 本帖最后由 doubleflygo 于 2010-2-18 10:04 编辑 ]