[C语言] 将32位 int有符号类型的十进制数据 反转输出

最近遇到了个离线考试, 没办法上网查资料, 但是作为一个高度依赖网络字典库记忆各种库函数的衰仔, 非常头痛,

故而结束考试后, 尝试编写一个无需任何库函数就可以实现32位的 int有符号类型 十进制数据 反转输出. 如输入123456 输出 654321; 负数保留负号.

存此笔记, 以作个人警示.

示例代码中 #include <stdio.h> 单纯是为了打印和 兼容scanf输入 故而实现该功能并不需要这个东西,.

  char i;
  char m;
  char wei[10] = {0};
  wei[0] = abs(x % 10);
  wei[1] = abs(x / 10 % 10);
  wei[2] = abs(x / 100 % 10);
  wei[3] = abs(x / 1000 % 10);
  wei[4] = abs(x / 10000 % 10);
  wei[5] = abs(x / 100000 % 10);
  wei[6] = abs(x / 1000000 % 10);
  wei[7] = abs(x / 10000000 % 10);
  wei[8] = abs(x / 100000000 % 10);
  wei[9] = abs(x / 1000000000 % 10);
  //使用分治思想进行数据可能会溢出判断
  if ((wei[0] != 0) && (wei[9] != 0)) {
    //数据绝对会溢出判断
    if (abs(wei[0]) > 2) {
      return 0;
    } else if (abs(wei[0]) == 2) {
      //判断第二位数据反转会不会溢出
      if (wei[1] > 1) {
        return 0;
      } else if (wei[1] == 1) {
        //判断第三位数据反转会不会溢出
        if (wei[2] > 4) {
          return 0;
        } else if (wei[2] == 4) {
          //判断第四位数据反转会不会溢出
          if (wei[3] > 7) {
            return 0;
          } else if (wei[3] == 7) {
            //判断第五位数据反转会不会溢出
            if (wei[4] > 4) {
              return 0;
            } else if (wei[4] == 4) {
              //判断第六位数据反转会不会溢出
              if (wei[5] > 8) {
                return 0;
              } else if (wei[5] == 8) {
                //判断第七位数据反转会不会溢出
                if (wei[6] > 3) {
                  return 0;
                } else if (wei[6] == 3) {
                  //判断第八位数据反转会不会溢出
                  if (wei[7] > 6) {
                    return 0;
                  } else if (wei[7] == 6) {
                    //判断第九位数据反转会不会溢出
                    if (wei[8] > 4) {
                      return 0;
                    } else if (wei[8] == 4) {
                      //判断第十位数据反转会不会溢出
                      if (x > 0 && wei[9] > 7) {
                        return 0;
                      }
                      if (x < 0 && wei[9] > 8) {
                        return 0;
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  for (i = 9; i >= 0; i--) {
    if (wei[i] != 0)
      break;
  }
  m = i;
  if (x < 0) {
    for (x = 0; i >= 0; i--) {
      x += wei[i] * pow(10, (m - i));
    }
    return -x;
  } else {
    for (x = 0; i >= 0; i--) {
      x += wei[i] * pow(10, (m - i));
    }
    return x;
  }

 

posted @ 2024-08-12 07:29  Atul-8  阅读(21)  评论(0编辑  收藏  举报