質問A:L1-ISBN番号

タイトル説明
すべての公式に出版された本には、それに対応するISBN番号があります。ISBNコードには、9桁、1つの識別コード、3つの区切り記号が含まれます。規定の形式はx-xxx-xxxxx-xです。ここで、記号-は区切り記号です(キーボードのマイナス記号)、最後の桁は識別コードです。たとえば、0-670-82162-4は標準のISBNコードです。ISBNコードの最初の桁は本の出版言語を表します(英語の場合は0など)。最初の区切り文字-出版社の後の3桁、たとえば670はバイキング出版社を表します。2番目の区切り文字の後の5桁は出版社の場合出版社の本のシリアル番号。最後の桁は識別コードです。
識別コードの計算方法は次のとおりです。
最初の桁に1を掛け、次の桁に2を掛けます...など、得られた結果mod11を使用して、余りが識別コードになります。図10に示すように、識別コードは大文字のXである。たとえば、ISBN番号0-670-82162-4の識別コード4は、次のように取得されます。9つの番号067082162の場合、左から右に1、2、...、9を掛けてから、それらを合計します。つまり、0×1 + 6×2 +……+ 2×9 = 1580×1 + 6×2 +……+ 2×9 = 158となり、158mod11の結果4を識別コードとします。
あなたの仕事は、入力されたISBN番号の識別コードが正しいかどうかを判断するプログラムを作成することです。正しい場合は、正しく出力するだけです。間違っている場合は、正しいと思われるISBN番号を出力します。

入力形式
書籍のISBN番号を表す文字シーケンス(入力がISBN番号の形式要件を満たしていることを確認してください)。

出力形式
入力ISBN番号の識別コードが正しい場合は1行、正しく出力しない場合は、指定された形式に従って正しいISBN番号(区切り文字-を含む)を出力します。

サンプル入力:

0-670-82162-4

サンプル出力:

right

サンプル入力:

0-670-82162-0

サンプル出力:

0-670-82162-4
#include<stdio.h>
int main()
{
    
    
    char a[20];
    int i,sum;
    while(scanf("%s",a)!=EOF)
    {
    
    
    	 i=0,sum=0;
    	sum+=a[i]-'0';
    	for(i=2;i<5;i++)
    	{
    
    
    		sum+=((a[i]-'0')*i);//(a[i]-'0')表示将字符型转为整型 
		}
		for(i=6;i<11;i++)
		{
    
    
			sum+=((a[i]-'0')*(i-1));
	
    		}
    		sum=sum%11;
		if(sum==10)
		{
    
    
			if(a[12]=='X')
			printf("right\n");
			else
			{
    
    
				a[12]='X';
				printf("%s\n",a);
			}
			
		}
		else if(sum==(a[12]-'0'))
		printf("right\n");
		
			
			else
			{
    
    
				a[12]=(char)(sum+'0');//将整型的sum强制转换为字符型 
				printf("%s\n",a);
			}
					
	}
    return 0;
}

大きな人はアドバイスを歓迎します。かわいい人がわからない場合は、q2651877067にプライベートメッセージを送信できます。QwQにお答えします。

おすすめ

転載: blog.csdn.net/mmmjtt/article/details/115281589