首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“C编程-现代方法”中的问题

“C编程-现代方法”中的问题
EN

Stack Overflow用户
提问于 2022-08-16 16:28:58
回答 4查看 156关注 0票数 0

第7章q11:

机票被分配了冗长的识别号码,如47715497443。要使最后一个数字有效,当其他数字(作为一个组)除以7时,该数字的最后一个数字必须与剩余数匹配。编写一个程序来测试票证是否有效。

我的代码是:

代码语言:javascript
复制
main(){ 

    char c;
    int remainder = 0;
    
    printf("Enter a ticket number: ");
    
    while((c = getchar()) != '\n'){
       c -= '0';
       remainder = (remainder * 10 + c) % 7;
    }

    return 0;
}

然而,我无法计算出航空公司号码的最后一位数,使之不包括在剩余的计算中,也无法用来验证机票。

任何帮助都将不胜感激。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2022-08-16 21:17:49

您只需要“缓冲”'\n‘之前输入的最后两个数字。(使用isdigit()测试键入的每个字符的有效性,并检查是否输入了至少两位数字,这可能是明智的。)

要“杂耍”两位数,这假定前面的“0”(cPrev)已经在磨削开始之前输入了。这是个粗糙的伤口。

代码语言:javascript
复制
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)。这还需要一个循环计数器,以确保至少输入两位数字。

代码语言:javascript
复制
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;
}
票数 0
EN

Stack Overflow用户

发布于 2022-08-16 17:12:30

首先,您应该将票号存储在一个长整数中,因为它很长!然后将最后一个数字存储在一个变量中,并将其除以10。最后,您可以检查余数是否等于最后一个数字。

代码语言:javascript
复制
#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;
}
票数 0
EN

Stack Overflow用户

发布于 2022-08-16 20:35:28

这就是我想出来的。我不认为这是最好的解决办法,但它确实有效。

代码语言:javascript
复制
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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73377276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档