temp[2]=str[14];
temp[3]='\\0';
if(strcmp(temp,\=0) {
newstr[7]='8'; }
else newstr[7]='9';
//下面是校检码,0的ascii码值是
int Wi[17]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};//权重
int S=0;
for(i=0;i<17;i++) {
S=S+Wi[i]*((int)(newstr[i])-48); }
int y;
y=S;
switch(y) {
case 0:newstr[17]='1';break;
case 1:newstr[17]='0';break;
case 2:newstr[17]='X';break;
case 3:newstr[17]='9';break;
case 10:newstr[17]='2';break;
default:
newstr[17]=(char)(12-y+48);break; }
newstr[18]='\\0';
strcpy(str,newstr); }
int IscheckedValid(char str[]) {
int n=strlen(str);//n=18
int num[17];//保存前位
int i;
for(i=0;i<17;i++)//保存前位
num[i]=(int)str[i]-48;
//下面是校检码,0的ascii码值是
int Wi[17]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};//权重
int S=0;
for(i=0;i<17;i++) {
S=S+Wi[i]*num[i];
}
int y;
y=S;
char lastnum;
switch(y) {
case 0:lastnum='1';break;
case 1:lastnum='0';break; case 2:lastnum='X';break;
case 3:lastnum='9';break;
case 10:lastnum='2';break;
default:
lastnum=(char)(12-y+48);break; }
if(lastnum==str[17])
return 1;
else
return 0;//0表示不合法 }
void run(char str[]) {
int n=strlen(str);
if(n==15) {
shengji(str);
printf(\ }
else if(n==18) {
if(!IscheckedValid(str))
printf(\
else printf(\ }
else printf(\ }
void main() {
int n;
scanf(\
char str[25];
for(int i=0;i gets(str); run(str); } } 36 科学记数法 成绩: 10 / 折扣: 0.8 对于非常大或者非常小的数据,我们通常用科学记数法来表示。例如在科技文献和电脑中经常遇到的 2.3×106 (计算机中的科学记数法表示为:2.3E6),或者 9.18×10-5 (科学记树法表示:9.18E-5)这种类型的数据。 输入: 用科学记数法表示的数据。即为符合C语言表示的科学记数法表示。 输出: 该数据的双精度表示 说明: 输入数据的精度不高于小数点后50位。 输入数据时,在实数和幂之间有空格进行分隔,空格个数不定。 结果保留到小数点后8位,如不足8位用0补足,超过8位则截断,不进行四舍五入的处理。 时额内间外存限进限制程制 测试以文本方式显示 用例1. 1.2345 E 3? 1 测以文本方式显示 试以文本方式显示 1. 1234.50000000? 测试输入 期待的输出 1640 秒M 以文本方式显示 1640 秒M