s*10的作用是怎末回事啊,知道控制第一个,但是具体是怎末控制呢
#include <string.h> int main(){ char ch[1000]={0}; int x=0,len,i=0,y,counter=0,arr[10]={-1}; scanf("%s",ch); do{ len=strlen(ch); if(len<4){ //字符转数字 for(i=0,y=0;i<len;i++){ y=y*10+ch[i]-'0'; } i=y/10-(y%10*5); if(0==i%17){ arr[counter]=1; counter++; }else{ arr[counter]=0; counter++; } }else{ //字符串预处理 去掉末尾,转换数字*5,再取三位,转换成数字减去 末尾*5,得出的结果再转回字符 y=5*(ch[len-1]-'0');//末尾的数字*5 x=(ch[len-4]-'0')*100+(ch[len-3]-'0')*10+(ch[len-2]-'0');//取剩余部分最后三位,转换成数字 x=x-y; //将得到的数字x再转回字符 if(x>=100){ ch[len-1]='\0';//需要对字符的末尾,手动加'\0
我日,按照他的定理也做了,自测答案没问题,但是无法通过答案测试。不按他的定理,直接对字符串求模,居然通过了 #include <stdio.h> #include <string.h> int main(){ char ch[1000]={0}; int x=0,len,i=0,counter=0,arr[10]={-1}; scanf("%s",ch); do{ len=strlen(ch); x=ch[0]-'0'; for(i=1;i<len;i++){ x=x*10; x=x+ch[i]-'0'; x=x%17; } if(0==x){ arr[counter]=1; counter++; }else{ arr[counter]=0; counter++; } scanf("%s",ch); }while('0'!=ch[0]); for(i=0;i<counter;i++){ printf("%d\n",arr[i]); } return 0; }
没有看懂 我是按照题目给的定理来的,老哥能不能看看,为什么错误50% #include<stdio.h> int main(){ long long int i; int a,b[10]={0}; int k=0; while(scanf("%lld",&i)&&i!=0){ a=i%10; i=i/10; if((i-5*a)%17==0) b[k]=1; k++; } for(int j=0;j<k;j++){ printf("%d\n",b[j]); } }
MarkandLcg 2020-03-03 16:14:16 |
我和你写的差不多但是这样提交就是错的
侑理 2020-03-06 15:43:03 |
@MarkandLcg long long int 也存不了10的100次方
yellow 2020-04-23 22:15:50 |
数值太大,没办法存10的100次方
葡萄 2020-04-25 12:39:55 |
谢谢啦!
九九归一 2021-04-15 16:42:54 |
晓得了晓得