• 2019牛客暑期多校训练营(第一场) J Fraction Comparision(比较/大数相加)


    链接:https://ac.nowcoder.com/acm/contest/881/J
    来源:牛客网


    题目大意:给出x,a,y,b四个数,让你比较$frac{x}{a}$和$frac{y}{b}$的大小,其中$0leq x,yleq 10^{18},1leq a,bleq 10^{9}$

    题解:直接移项相乘会爆long long,所以我们需要先比较$left | frac{x}{a} ight |$和$left | frac{y}{b} ight |$的大小,然后在让x%=a,y%=b,然后移项相乘进行比较即可。当然手打大数相加也可以。

    C++模拟大数相加AC代码:

    语言:C++ 代码长度:2106 运行时间: 938 ms 占用内存:596K 

     1 #include<vector>
     2 #include<cstdio>
     3 #include<iostream>
     4 #include<cmath>
     5 #include<queue>
     6 #include<cstdlib>
     7 #include<cstring>
     8 #define numm ch-48
     9 #define pd putchar(' ')
    10 #define pn putchar('
    ')
    11 #define pb push_back
    12 #define fi first
    13 #define se second
    14 #define fre1 freopen("1.txt","r",stdin)
    15 #define fre2 freopen("2.txt","w",stdout)
    16 using namespace std;
    17 template <typename T>
    18 void read(T &res) {
    19     bool flag=false;char ch;
    20     while(!isdigit(ch=getchar())) (ch=='-')&&(flag=true);
    21     for(res=numm;isdigit(ch=getchar());res=(res<<1)+(res<<3)+numm);
    22     flag&&(res=-res);
    23 }
    24 template <typename T>
    25 void write(T x) {
    26     if(x<0) putchar('-'),x=-x;
    27     if(x>9) write(x/10);
    28     putchar(x%10+'0');
    29 }
    30 const int maxm=8000010;
    31 const int maxn=50005;
    32 const int inf=0x3f3f3f3f;
    33 const int INF=0x7fffffff;
    34 typedef long long ll;
    35 int a[maxn];
    36 ll gcd(ll a,ll b) {
    37     return b?gcd(b,a%b):a;
    38 }
    39 int xiangcheng(char *x,char *a,char *y,char *b) {
    40     int s1[100],s2[100];
    41     if(x[0]=='0'||y[0]=='0') {
    42         return x[0]>y[0]?1:(x[0]=y[0]?0:-1);
    43     }
    44     memset(s1,0,sizeof(s1));
    45     int l1=strlen(x);
    46     int l2=strlen(b);
    47     for(int i=l1-1;i>=0;i--){
    48         for(int j=l2-1;j>=0;j--)
    49             s1[l1+l2-i-j-2]+=(x[i]-'0')*(b[j]-'0');
    50         for(int k=0;k<l1+l2-1;k++)
    51             if(s1[k]>9){s1[k+1]+=s1[k]/10;s1[k]%=10;}
    52     }
    53  
    54     memset(s2,0,sizeof(s2));
    55     int l3=strlen(a);
    56     int l4=strlen(y);
    57     for(int i=l3-1;i>=0;i--) {
    58         for(int j=l4-1;j>=0;j--)
    59             s2[l3+l4-i-j-2]+=(a[i]-'0')*(y[j]-'0');
    60         for(int k=0;k<l3+l4-1;k++)
    61             if(s2[k]>9){s2[k+1]+=s2[k]/10;s2[k]%=10;}
    62     }
    63     int n1=l1+l2-1;int n2=l3+l4-1;
    64     if(s2[n2]==0)n2--;
    65     if(s1[n1]==0)n1--;
    66     if(n1>n2) return 1;
    67     else if(n1<n2) return -1;
    68  
    69     for(int i=n1;i>=0;i--)
    70         if(s1[i]>s2[i]) return 1;
    71         else if(s1[i]<s2[i]) return -1;
    72     return 0;
    73  
    74 }
    75 int main()
    76 {
    77     int n,t;
    78     char x[110],y[110],a[110],b[110];
    79     while(cin>>x>>a>>y>>b) {
    80         int x2=xiangcheng(x,y,a,b);
    81         if(x2<0) cout<<"<";
    82         else if(x2>0) cout<<">";
    83         else cout<<"=";
    84         cout<<endl;
    85     }
    86     return 0;
    87 }
    代码在这里!

    java大数相加AC代码:

    语言:Java 代码长度:590 运行时间: 2852 ms 占用内存:182828K 

     1 import java.util.*;
     2 import java.math.*;
     3  
     4 public class Main {
     5     public void Multiply() {
     6         Scanner cin=new Scanner(System.in);
     7         while(cin.hasNext()) {
     8             BigInteger x=cin.nextBigInteger();
     9             BigInteger a=cin.nextBigInteger();
    10             BigInteger y=cin.nextBigInteger();
    11             BigInteger b=cin.nextBigInteger();
    12              
    13             BigInteger L=x.multiply(b);
    14             BigInteger R=y.multiply(a);
    15              
    16             if(L.compareTo(R)<0) System.out.println("<");
    17             else if(R.compareTo(L)<0) System.out.println(">");
    18             else System.out.println("=");
    19              
    20         }
    21     }
    22     public static void main(String[] args) {
    23         new Main().Multiply();
    24     }
    25 }
    代码在这里!
  • 相关阅读:
    输入属性,输出属性
    angular响应式表单
    angular 响应式表单指令
    c++ Primer
    CString 操作函数
    字符串分割strtok_s
    LPSTR LPTSTR
    CString分割切分
    CStringArray
    十进制
  • 原文地址:https://www.cnblogs.com/wuliking/p/11240233.html
Copyright © 2020-2023  润新知