早教吧 育儿知识 作业答案 考试题库 百科 知识分享

C语言题,急!可以适量的用点C++问题描述:每本书籍都有一个ISBN号码,ISBN号为一个由10个数码组成的的字符串,如果第一个数字乘以10加上第二个数字乘以9…的和,是11的倍数,则该ISBN号

题目详情
C语言题,急!可以适量的用点C++
问题描述:
每本书籍都有一个ISBN号码,ISBN号为一个由10个数码组成的的字符串,如果第一个数字乘以10加上第二个数字乘以9…的和,是11的倍数,则该ISBN号码为合理的号码,否则不合理。如字符串“0201103311”就是一个合理的ISBN号码,因为
10*0 + 9*2 + 8*0 + 7*1 + 6*1 + 5*0 + 4*3 + 3*3 + 2*1 + 1*1 = 55是11的倍数。而在实际应用中,可以在最后一个字符处使用字符X来表示十进制数10。如“156881111X”也是一个合理的ISBN号码。下面输入一些ISBN号码,其中有一个字符没有给出,请你计算出这个数字。
输入格式:
第一行一个正整数t(≤100),表示数据组数,接下来t行,每行一个长度为10的字符串,仅含有0~1、X和?,其中“?”表示对应位置上的数字没有给出。
输出格式:
对应每组数据,计算出对应的“?”的值。如果没有任何一个符号使之合理,则输出-1。
样例输入
2
15688?111X
156881111?
样例输出
1
X
▼优质解答
答案和解析
#include
int main()
{
\x09char a[10] = "15688?111X";
\x09int temp = 0;
\x09int index;
\x09int i;
\x09for(i=0;i<10;i++)
\x09{
\x09\x09if(a[i]=='X')
\x09\x09\x09a[i]=':';
\x09\x09else if(a[i]=='?')
\x09\x09{
\x09\x09\x09a[i]='0';
\x09\x09\x09index=i;
\x09\x09}
\x09\x09temp = temp + (a[i]-48)*(10-i);
\x09printf("temp = %d",temp);
\x09}
\x09printf("index = %d",index);
\x09for(i=0;i<=10;i++)
\x09{
\x09\x09temp = temp + i*(10-index);
\x09\x09if(temp%11==0)
\x09\x09{
\x09\x09\x09if(i==10)
\x09\x09\x09\x09printf("X");
\x09\x09\x09
\x09\x09\x09printf("%d",i);
\x09\x09\x09break;
\x09\x09}
\x09\x09else
\x09\x09\x09temp = temp - i*(10-temp);
\x09\x09
\x09\x09printf("temp = %d",temp);\x09
\x09}
\x09return 0;
}
char a里面是字符,所以要转化为ascii~~~