额,还是老生常谈的细节问题

 1 #include <stdio.h>
 2 int max (int a, int b)
 3 {
 4     if(a>b) return a ;
 5     else return b ;
 6 }
 7 char a[100000000];
 8 char b[100000000];
 9 int a1[100000000];
10 int b1[100000000];
11 int c[100000000];
12 int len_a,len_b,i;
13 int main ()
14 {
15     gets(a);
16     gets(b);
17     while(a[len_a]>='0'&&a[len_a]<='9') len_a ++;
18     while(b[len_b]>='0'&&b[len_b]<='9') len_b ++;
19     //printf("%d %d\n",len_a,len_b);
20     int len = max (len_a,len_b);
21     for(i=0;i<len_a;i++)
22         a1[len_a-i-1] = a[i] - '0' ;
23       
24     for(i=0;i<len_b;i++)
25         b1[len_b-i-1] = b[i] - '0' ;
26     
27     //for(i=0;i<len_a;i++)
28         //printf("%d",a1[i]);
29     //printf("\n");
30     //for(i=0;i<len_b;i++)
31         //printf("%d",b1[i]);
32     
33     for (i=0;i<len;i++)
34       c[i] = a1[i] - b1 [i];
35     for (i=0;i<len;i++)
36       if (c[i]<0) c[i]+=10,c[i+1]-=1;
37     
38     //for(i=len-1;i>=0;i--)
39       //printf("%d",c[i]);
40     //printf("\n");
41     while(c[len-1]== 0&&len) len--;
42      if(len==0) printf("0");
43     for(i=len-1;i>=0;i--)
44      printf("%d",c[i]);
45             
46 }
其中判断 && len 的很重要! 不然会造成无法相减相同的数!
#include <stdio.h>
int gcd (int a,int b )
{
    if(b==0)return a ;
    else return gcd(b,a%b);
}
int main ()

{
    int l,i,j,right,left;
    double a ,b,dif ,product;
    scanf("%lf%lf%d",&a,&b,&l);
    double quotient = a / b ;
    //printf("%lf",quotient);
    double min = 1e9 + 7 ;
    for(i=1;i<=l;i++)
     for(j=1;j<=l;j++)
     {
          dif = (double) (i) / (double )(j) -  quotient ;
          product = (double) (i) / (double )(j) ;
          //printf("%lf %lf\n",dif,product);
         if(gcd(i,j)== 1 &&  dif>= 0 && dif < min )
         {
         left = i ;
         right = j ;
         min = dif;
         }
     }
     printf("%d %d",left,right);
 } 
咳咳,还有这个简化比例,一定要完善判断边缘条件! (比如等于含与近似)

猜你喜欢

转载自www.cnblogs.com/IAmParasite/p/10148131.html