题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1435
这个题做的好没状态。上几天刷的高精度都白刷了啊。。。首先代码除法和取余以前都做过,还要查看以前的代码,模板还打错。。DEBUG好久,然后由于这个破精度(还是看的队友的解题报告),错了好几次,开始数组RE一一次,忘记0的情况(高精度老问题),还要有那个破空格,终于6A。。。基本上这个题所有的trick我都踩了。
1 #include <stdio.h> 2 #include <string.h> 3 long long p[10001]; 4 char num[10001]; 5 int main() 6 { 7 long long i,j,k,len,n,mod; 8 char lat[3]; 9 while(scanf("%s%s%lld",num,lat,&n)!=EOF) 10 { 11 memset (p,0,sizeof(p)); 12 len = strlen(num); 13 for(i = 0;i <= len-1;i ++) 14 { 15 p[len-i-1] = num[i] - '0'; 16 } 17 if(lat[0] == '/') 18 { 19 for(i = len-1;i >= 0;i --) 20 { 21 if(p[i]%n == 0) 22 { 23 p[i] = p[i]/n; 24 } 25 else 26 { 27 if(i-1>=0) 28 p[i-1] += (p[i]%n)*10; 29 p[i] = p[i]/n; 30 } 31 } 32 j = 0; 33 for(i = len-1;i >= 0;i --) 34 { 35 if(p[i] != 0) 36 j = 1; 37 if(j) 38 printf("%lld",p[i]); 39 } 40 if(j == 0) printf("0"); 41 printf("\n"); 42 } 43 else if(lat[0] == '%') 44 { 45 j = 1; 46 k = 1; 47 mod = p[0]%n; 48 for(i = 1;i <= len-1;i ++) 49 { 50 k = k * 10 % n; 51 if(p[i] != 0) 52 { 53 mod += (k*p[i])%n; 54 mod = mod % n; 55 } 56 } 57 printf("%lld\n",mod%n); 58 } 59 } 60 return 0; 61 }
补充:取余 写的繁琐了。
1 mod = 0; 2 for(i = 0; i <= len-1; i ++) 3 { 4 mod = (mod*10 + num[i]-'0') % n; 5 }