第7章q11:
机票被分配了冗长的识别号码,如47715497443。要使最后一个数字有效,当其他数字(作为一个组)除以7时,该数字的最后一个数字必须与剩余数匹配。编写一个程序来测试票证是否有效。
我的代码是:
main(){
char c;
int remainder = 0;
printf("Enter a ticket number: ");
while((c = getchar()) != '\n'){
c -= '0';
remainder = (remainder * 10 + c) % 7;
}
return 0;
}然而,我无法计算出航空公司号码的最后一位数,使之不包括在剩余的计算中,也无法用来验证机票。
任何帮助都将不胜感激。
发布于 2022-08-16 21:17:49
您只需要“缓冲”'\n‘之前输入的最后两个数字。(使用isdigit()测试键入的每个字符的有效性,并检查是否输入了至少两位数字,这可能是明智的。)
要“杂耍”两位数,这假定前面的“0”(cPrev)已经在磨削开始之前输入了。这是个粗糙的伤口。
int main( void ) {
char cPrev = '0';
char cCurr = '0';
int remainder = 0;
printf( "Enter a ticket number: " );
int cin;
while( ( cin = getchar() ) != '\n' && cin != EOF ) {
cPrev = cCurr;
remainder = ( remainder * 10 + (cCurr - '0') ) % 7;
cCurr = (char)cin;
}
if( cin != EOF )
printf( "%s\n", remainder == cCurr - '0' ? "Valid" : "Invalid" );
return 0;
}编辑:没有什么可做的,这里有一个版本,只需要一个挂起的字符,进化的余数,和一个输入16位字符(用于EOF)。这还需要一个循环计数器,以确保至少输入两位数字。
int main( void ) {
for(;;) {
char pending = '0';
int remainder = 0;
printf( "Enter a ticket number: " );
int cin;
for( int cnt = 0; ( cin = getchar() ) != '\n' && cin != EOF; cnt++ ) {
remainder = ( remainder * 10 + (pending - '0') ) % 7;
pending = (char)cin;
}
if( cin != EOF )
printf( "%s\n", (cnt >= 2 && remainder == pending - '0') ? "Valid" : "Invalid" );
}
return 0;
}发布于 2022-08-16 17:12:30
首先,您应该将票号存储在一个长整数中,因为它很长!然后将最后一个数字存储在一个变量中,并将其除以10。最后,您可以检查余数是否等于最后一个数字。
#include <stdio.h>
int main() {
long long int ticketNumber;
int lastDigit;
int remainder;
scanf("%lld",&ticketNumber);
lastDigit = ticketNumber %10;
ticketNumber/=10;
if(ticketNumber % 7 == lastDigit){
printf("Ticket is valid!");
}else{
printf("Ticket is not valid!");
}
return 0;
}发布于 2022-08-16 20:35:28
这就是我想出来的。我不认为这是最好的解决办法,但它确实有效。
int main(void) {
char c;
int remainder = 0;
int i = 0;
char str[20] = "";
printf("Enter a ticket number: ");
while ((c = getchar()) != '\n')
{
str[i] = c;
i++;
}
for (int x = 0;x<i-1;x++)
{
remainder = (remainder * 10 + (str[x]-'0')) % 7;
}
if (remainder == (str[i-1]-'0'))
printf("Valid");
else
printf("Invalid");
return 0;https://stackoverflow.com/questions/73377276
复制相似问题