// 最短两边大于最长边即可。核心代码总量:7行 AC!importjava.math.BigInteger;importjava.util.Arrays;importjava.util.Scanner;publicclassMain {publicstaticvoidmain(String[] args) {Scanner in = newScanner(System.in);while(in.hasNext()){BigInteger[] arr=newBigInteger[3];for(inti = 0; i < 3; i++) {arr[i]=newBigInteger(in.next());}Arrays.sort(arr);if(arr[0].add(arr[1]).compareTo(arr[2])>0){System.out.println("Yes");}else{System.out.println("No");}}}}
import java.util.*;
import java.io.*;
import java.math.*;
 public class  Main{
     public static void main(String args[]){
         Scanner in=new Scanner(System.in);
         boolean k;
         BigInteger a,b,c;
         while(in.hasNext()){
             a=in.nextBigInteger();
             b=in.nextBigInteger();
             c=in.nextBigInteger();
             k=true;
             if((a.add(b)).compareTo(c)<=0) k=false;
             if((b.add(c)).compareTo(a)<=0) k=false;
             if((a.add(c)).compareTo(b)<=0) k=false;
             if(k) System.out.println("Yes");
             else  System.out.println("No");
         }
     }
     
     
     
     
 }
int main()
{		
	printf("请输入三条边,用空格隔开\n");
	while (1)
	{
		int a[3] = {0};
		scanf("%d %d %d",&a[0],&a[1],&a[2]);
		for (int i = 0;i < 3; i++)
		{
			if ((a[i] < a[(i+1)%3] + a[(i+2)%3]) && (a[i] > a[(i+1)%3] - a[(i+2)%3]) && (a[i] > a[(i+2)%3] - a[(i+1)%3]))
			{
			}
			else{
				printf("NO\n");
				break;
			}
			printf("YES\n");
			break;
		}
	}
	return 0;
}
                                                                                    用字符串表示整数,定义加法和比较大小的函数
#include <iostream>
#include <string>
using namespace std;
string add(string s1, string s2) {
    int len1 = s1.size();
    int len2 = s2.size();
    string res = "";
    int i, j, k , t = 0;
    for (i=len1-1, j=len2-1; i>=0 && j>=0; i--, j--) {
        k = (s1[i]-'0') + (s2[j] - '0') + t;
        res = (char)(k % 10 + '0') + res;
        t = k / 10;
    }
    while (i>=0) {
        k = (s1[i]-'0') + t;
        res = (char)(k % 10 + '0') + res;
        t = k / 10;
        i--;
    }
    while (j>=0) {
        k = (s2[j]-'0') + t;
        res = (char)(k % 10 + '0') + res;
        t = k / 10;
        j--;
    }
    if (t>0) {
        res = (char) (t + '0') + res;
    }
    
    return res;
}
bool great(string s1, string s2) {
    int len1 = s1.size();
    int len2 = s2.size();
   	if (len1 > len2)
        return true;
    else if (len1 < len2)
        return false;
    else {
        return s1 > s2;
    }
    
}
int main() {
    string a, b, c;
    while (cin>>a>>b>>c) {
        if (great(add(a,b), c) && great(add(a,c),b) && great(add(b,c),a))
            cout<<"Yes"<<endl;
        else
            cout<<"No"<<endl;
    }
}
#include <iostream>
#include <string>
using namespace std;
void sum(string& a, string& b, string& ab) {
    int i = a.size() - 1, j = b.size() - 1, k = ab.size() - 1;
    int carry = 0;
    while (j >= 0 || carry) {
        int n1 = i >= 0 ? a[i--] - '0' : 0;
        int n2 = j >= 0 ? b[j--] - '0' : 0;
        ab[k--] = (n1 + n2 + carry) % 10 + '0';
        carry = (n1 + n2 + carry) / 10;
    }
}
bool cmp(string& a, string& b, string& c) {
    if (b.size() < c.size() - 1) return false;   // 从数量级上先判断
    string ab(b.size() + 1, 0);         // a + b 后可能会进位,预留一位
    sum(a, b, ab);
    int i = 0, j = 0;
    if (ab[0] == 0) i++;                // 说明预留的一位没有用上
    if (ab.size() - i < c.size() - j) return false;
    else if (ab.size() - i > c.size() - j) return true;
    while (i < ab.size()) {
        if (ab[i] < c[j]) return false;
        else if (ab[i] > c[j]) return true;
        i++;
        j++;
    }
    return false;     // a + b = c
}
int main() {
    string a, b, c;
    while (cin >> a >> b >> c) {
        if (a.size() > b.size() || (a.size() == b.size() && a > b)) a.swap(b);    // 确保 a < b < c
        if (a.size() > c.size() || (a.size() == c.size() && a > c)) a.swap(c);
        if (b.size() > c.size() || (b.size() == c.size() && b > c)) c.swap(b);
        if (cmp(a, b, c)) cout << "Yes" << endl;
        else cout << "No" << endl;
    }
} import java.math.BigInteger;
import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        while(sc.hasNext()){
            BigInteger a=sc.nextBigInteger();
            BigInteger b=sc.nextBigInteger();
            BigInteger c=sc.nextBigInteger();
            if(a.add(b).compareTo(c)>0 && a.add(c).compareTo(b)>0 && b.add(c).compareTo(a)>0)
                System.out.println("Yes");
            else
                System.out.println("No");
        }
    }
}
 public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
//            long a = sc.nextLong();
//            long b = sc.nextLong();
//            long c = sc.nextLong();
            BigInteger a = new BigInteger(sc.next());
            BigInteger b = new BigInteger(sc.next());
            BigInteger c = new BigInteger(sc.next());
            if (isTriangle(a, b, c)) {
                System.out.println("Yes");
            } else {
                System.out.println("No");
            }
        }
    }
    public static boolean isTriangle(BigInteger a, BigInteger b, BigInteger c) {
//        return a + b > c && a + c > b && b + c > a;
        return a.add(b).compareTo(c) > 0 && a.add(c).compareTo(b) > 0 && b.add(c).compareTo(a) > 0;
    } 很暴力很弱智一看就懂的代码
#include <iostream>
#include<algorithm>
using namespace std;
bool getnum(string a, string b) {
    if (a.length() > b.length())
        return true;
    else if (a.length() == b.length()) {
        auto la = a.begin();
        auto lb = b.begin();
        while (la != a.end()) {
            if (*la > *lb)
                return true;
            if (*la < *lb)
                return false;
            la++;
            lb++;
        }
        if (la == a.end())
            return false;
    }
    else
        return false;
    return false;
}
void getred(string a, string b, string c) {
    string tmp;
    reverse(b.begin(), b.end());
    reverse(c.begin(), c.end());
    auto lb = b.begin();
    auto lc = c.begin();
    int adv = 0;
    while (lb != b.end() && lc != c.end()) {
        int pos = (*lb - '0') + (*lc - '0') + adv;
        tmp += (pos % 10 + '0');
        adv = pos / 10;
        ++lb;
        ++lc;
    }
    while (lb != b.end()) {
        int pos = (*lb - '0') + adv;
        tmp += (pos % 10 + '0');
        adv = pos / 10;
        ++lb;
    }
    while (lc != c.end()) {
        int pos = (*lc - '0') + adv;
        tmp += (pos % 10 + '0');
        adv = pos / 10;
        ++lc;
    }
    if(adv!=0)
        tmp+=(adv+'0');//这里万万不能漏掉
    reverse(tmp.begin(), tmp.end());
    getnum(tmp, a) == 1 ? cout << "Yes" << endl : cout << "No" << endl;
    return;
}
void istria(string a, string b, string c) {
    string sum, red, mid;
    if (getnum(a, b) == 1) {
        sum = b;
        red = (getnum(a, c) == 1 ? a : c);
        mid = (getnum(a, c) == 0 ? a : c);
    }
    else {
        sum = a;
        red = (getnum(b, c) == 1 ? b : c);
        mid = (getnum(b, c) == 0 ? b : c);
    }
    getred(red, mid, sum);
}
int main() {
    string a, b, c;
    while (cin >> a >> b >> c){
        istria(a, b, c);
    }
    return 0;
}
                                                                                    
//使用字符串存储数据,然后写字符串相加函数,和比较的仿函数
#include <iostream>
using namespace std;
#include <vector>
#include <algorithm>
#include <string>
struct Com
{
    bool operator()(const string& str1,const string& str2) const
    {
        if(str1.size() < str2.size())
        {
            return true;
        }
        else if(str1.size() == str2.size())
        {
            for(size_t i  = 0; i < str1.size(); i++)
            {
                if(str1[i] < str2[i])
                {
                    return true;
                }
                else if(str1[i] > str2[i])
                {
                    return false;
                }
            }
            
        }
        
        return false;
    }
};
string Add(const string& str1,const string& str2)
{
    //int Max =  std::max(str1.size(),str2.size());
    string res;
    //res.reserve(Max + 1);
    int index1 = str1.size() - 1;
    int index2 = str2.size() - 1;
    int sum = 0;
    int add = 0;
    while(index1 >= 0 && index2 >= 0)
    {
        int tmp = str1[index1] - '0' + str2[index2] - '0' + add;
        sum = tmp % 10;
        add = tmp / 10;
        res += sum + '0';
        index1--;
        index2--;
    }
    //cout << res << endl;
    while(index1 >= 0)
    {
        int tmp = str1[index1] - '0' + add;
        sum = tmp % 10;
        add = tmp / 10;
        res += sum + '0';
        index1--;
    }
    while(index2 >= 0)
    {
        int tmp = str2[index2] - '0' + add;
        sum = tmp % 10;
        add = tmp / 10;
        res += sum + '0';
        index2--;
    }
    //cout << res << endl;
    if(add > 0)
    {
        res += add + '0';
    }
    reverse(res.begin(),res.end());
    return res;
}
bool Judge(const vector<string>& v)
{
    string add = Add(v[0],v[1]);
    //cout << add << endl;
    if(Com()(add,v[2]) || add == v[2])
    {
        return false;
    }
    return true;
}
int main()
{
    vector<string> v(3);
    while(cin >> v[0] >> v[1] >> v[2])
    {
        sort(v.begin(),v.end(),Com());
        bool res = Judge(v);
        if(res == true)
        {
            cout << "Yes" << endl;
        }
        else
        {
            cout << "No" << endl;
        }
    }
    return 0;
}
     public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
            String a=scanner.next();
            String b=scanner.next();
            String c=scanner.next();
            if (compare(addStr(a,b),c)&&compare(addStr(a,c),b)&&compare(addStr(b,c),a))
            {
                System.out.println("Yes ");
            }
            else
            {
                System.out.println("No ");
            }
    }
    }
   private static boolean compare(String s1,String s2)
    {
        if (s1.length()==s2.length())
        {
          if (s1.compareTo(s2)>0)
          {
              return true;
          }
          else
          {
              return false;
          }
        }
        else
        {
            if (s1.length()>s2.length())
            {
                return true;
            }
            else
            {
                return false;
            }
        }
    }
    private static String addStr(String a, String b)
    {
        int i = a.length() - 1;
        int j = b.length() - 1;
        int carry = 0;
        StringBuilder sb = new StringBuilder();
        while (i >= 0 || j >= 0 || carry != 0)
        {
            int x = i >= 0 ? a.charAt(i) - '0' : 0;
            int y = j >= 0 ? b.charAt(j) - '0' : 0;
            int sum = x + y + carry;
            sb.append(sum % 10);
            carry = sum / 10;
            i--;
            j--;
        }
        return sb.reverse().toString();
    } import java.util.*;
import java.math.*;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            BigDecimal a = sc.nextBigDecimal();
            BigDecimal b = sc.nextBigDecimal();
            BigDecimal c = sc.nextBigDecimal();
            if(a.add(b).compareTo(c) > 0 
              && a.add(c).compareTo(b) > 0
              &&c.add(b).compareTo(a) > 0){
                System.out.println("Yes");
            }else{
                System.out.println("No");
            }
        }
    }
} 
对三角形判断成立条件,学过一点小学数学的都知道任意两条边之和大于第三边,不过还有另外一种判定方式任意两边之差小于第三边,其实两者核心思想是一样的,只是判断形式不同,比如a + b > c,可以称为 a > c - b 或者 b > c - a。
由于数据比较大,这里我们采用任意两边之差小于第三边的方式进行判断。
注意:由于a > c - b 与 b > c - a是等效的,所以三个条件不能写重复。
#include <iostream>
using namespace std;
int main() {
    //注意输入范围是10^100级别,所以int、long long类型会超出
    double a = 0, b = 0, c = 0;
    //scanf返回值为正确输入数据的变量个数,当一个变量都没有成功获取数据时,此时返回-1
    while (scanf("%lf %lf %lf", &a, &b, &c) != - 1) {
        //a < b + c, b < a + c, c < b + a任意两边之和大于第三版(任意两边之差小于第三边,注意别写重复了)
        //a > c - b 与 b > c - a 都是判断 a + b > c
        if (a - b < c && b - c < a && c - a < b) {
            printf("Yes\n");
        } else {
            printf("No\n");
        }
    }
    return 0;
}
————————————————
版权声明:本文为CSDN博主「hestyle」的原创文章,遵循 CC 4.0 BY 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://hestyle.blog.csdn.net/article/details/104699291
                                                                                    #include <stdio.h>
#include <stdlib.h>
#include <string.h>
void exchange(char*, int*, int);//字符变数字并转置
int add(int*, int*, int*, int, int);//大数相加
int is_true(int*, int*, int, int);//判断是否两边之和大于第三边
int main()
{
    char a[110], b[110], c[110];
    while(~scanf("%s %s %s", a, b, c))
    {
        int len_a = strlen(a), len_b = strlen(b), len_c = strlen(c);
        int a_digit[110] = {0}, b_digit[110] = {0}, c_digit[110] = {0};
        exchange(a, a_digit, len_a);
        exchange(b, b_digit, len_b);
        exchange(c, c_digit, len_c);
        int sum1[110] = {0}, sum2[110] = {0}, sum3[110] = {0};
        int len_sum1 = add(a_digit, b_digit, sum1, len_a, len_b);
        int len_sum2 = add(a_digit, c_digit, sum2, len_a, len_c);
        int len_sum3 = add(b_digit, c_digit, sum3, len_b, len_c);
        int temp = is_true(sum1, c_digit, len_sum1, len_c) + is_true(sum2, b_digit, len_sum2, len_b) + is_true(sum3, a_digit, len_sum3, len_a);
        if(temp == 3)
            printf("Yes\n");
        else
            printf("No\n");
    }
    return 0;
}
void exchange(char str[], int digit[], int len)
{
    for(int i = 0; i < len; i++)
        digit[i] = str[len - i - 1] - '0';
}
int add(int a[], int b[], int sum[], int len_a, int len_b)
{
    int l = (len_a > len_b) ? len_a : len_b;
    int count = 0;
    int i;
    for(i = 0; i < l; i++)
    {
        sum[i] = a[i] + b[i] + count;
        count = sum[i] / 10;
        sum[i] %= 10;
    }
    if(count)
    {
        sum[l] = count;
        l++;
    }
    return l;
}
int is_true(int sum[], int c[], int len_sum, int len_c)
{
    if(len_sum > len_c)
        return 1;
    else if(len_sum < len_c)
        return 0;
    else
    {
        for(int i = len_c - 1; i >= 0; i--)
        {
            if(sum[i] > c[i])
                return 1;
            else if(sum[i] < c[i])
                return 0;
        }
    }
    return 0;
}