C 两个长整型整数的和,当它们给出的结果大于T长整型整数时?

C 两个长整型整数的和,当它们给出的结果大于T长整型整数时?,c,math,long-integer,integer-overflow,C,Math,Long Integer,Integer Overflow,当C中的结果将大于long-long-int时,是否有可能将两个不同的long-long-int变量相加?因为OP想要“在屏幕上打印结果”,所以将数字分成两部分:最高有效位和最低有效位 #include <stdlib.h> void print_long_long_sum(long long a, long long b) { if ((a < 0) == (b < 0)) { // a and b of the same sign? // Sum th

当C中的结果将大于
long-long-int
时,是否有可能将两个不同的
long-long-int
变量相加?

因为OP想要“在屏幕上打印结果”,所以将数字分成两部分:最高有效位和最低有效位

#include <stdlib.h>

void print_long_long_sum(long long a, long long b) {
  if ((a < 0) == (b < 0)) {  // a and b of the same sign?
    // Sum the Most-Significatn_Digits and Least-Significant Digit separately
    int sumLSD = (int) (a % 10 + b % 10);
    long long sumMSDs = a / 10 + b / 10 + sumLSD / 10;
    sumLSD %= 10;
    printf("sum = ");
    if (sumMSDs) {
      printf("%lld", sumMSDs);
      // Since sign already printed, insure next print is positive
      sumLSD = abs(sumLSD); 
    }
    printf("%d\n", sumLSD);
  } else { // No need to separate as there is no chance for overflow
    printf("sum = %lld\n", a + b);
  }
}
#包括
无效打印长和(长a、长b){
如果((a<0)=(b<0)){//a和b的符号相同?
//将最高有效位和最低有效位分别相加
int sumLSD=(int)(a%10+b%10);
长-长总和SDS=a/10+b/10+sumLSD/10;
sumLSD%=10;
printf(“sum=”);
如果(sumMSDs){
printf(“%lld”,总和);
//由于标志已经打印,请确保下一次打印为正数
sumLSD=绝对值(sumLSD);
}
printf(“%d\n”,sumLSD);
}否则{//无需分离,因为没有溢出的机会
printf(“总和=%lld\n”,a+b);
}
}

您希望从总和中得到什么结果?^^,您需要一个长整数。我希望程序在屏幕上打印结果,我期望的数字比长整数所能容纳的数字大。如果可能,请使用
int128\u t
。如果您在64位平台上,如果可行,请使用。否则你需要一个库,比如说,哇,这是一个很好的解决方法,用你的方法我可以得到9223372036854775805676,wich太大了。非常感谢,你给了我一个好主意。@Daedra注意:当标志不同时,我没有使用单独的部分。如果代码是这样做的,那么
sumLSD
sumMSDs
可能具有不同的符号,这会使数学和打印过于复杂。