[C語言] 將32位 int有符號型別的十進位制資料 反轉輸出 [無需任何庫函式]

Atul-8發表於2024-08-12

最近遇到了個離線考試, 沒辦法上網查資料, 但是作為一個高度依賴網路字典庫記憶各種庫函式的衰仔, 非常頭痛,

故而結束考試後, 嘗試編寫一個無需任何庫函式就可以實現32位的 int有符號型別 十進位制資料 反轉輸出. 如輸入123456 輸出 654321; 負數保留負號.

存此筆記, 以作個人警示.

示例程式碼中 #include <stdio.h> 單純是為了列印和 相容scanf輸入 故而實現該功能並不需要這個東西,.

#include <stdio.h>
char run(int *numb) {
  char i;
  char wei[10] = {0};
  wei[0] = *numb % 10;
  wei[1] = *numb / 10 % 10;
  wei[2] = *numb / 100 % 10;
  wei[3] = *numb / 1000 % 10;
  wei[4] = *numb / 10000 % 10;
  wei[5] = *numb / 100000 % 10;
  wei[6] = *numb / 1000000 % 10;
  wei[7] = *numb / 10000000 % 10;
  wei[8] = *numb / 100000000 % 10;
  wei[9] = *numb / 1000000000 % 10;

  for (i = 9; i >= 0; i--)
    if (wei[i] != 0)
      break;
  *numb = 0;
  if (i >= 0) {
    *numb += wei[i];
    i--;
  } else
    goto end;
  if (i >= 0) {
    *numb += wei[i] * 10;
    i--;
  } else
    goto end;
  if (i >= 0) {
    *numb += wei[i] * 100;
    i--;
  } else
    goto end;
  if (i >= 0) {
    *numb += wei[i] * 1000;
    i--;
  } else
    goto end;
  if (i >= 0) {
    *numb += wei[i] * 10000;
    i--;
  } else
    goto end;
  if (i >= 0) {
    *numb += wei[i] * 100000;
    i--;
  } else
    goto end;
  if (i >= 0) {
    *numb += wei[i] * 1000000;
    i--;
  } else
    goto end;
  if (i >= 0) {
    *numb += wei[i] * 10000000;
    i--;
  } else
    goto end;
  if (i >= 0) {
    *numb += wei[i] * 100000000;
    i--;
  } else
    goto end;
  if (i >= 0) {
    *numb += wei[i] * 1000000000;
    i--;
  } else
    goto end;
end:
  if (*numb > 2147483647 || *numb < -2147483648)
    *numb = 0;
}
int main() {
  int numb[1] = {123456089};
  // scanf("%d", &numb[0]);
  run(numb);
  printf("%d\n", numb[0]);

  return 0;
}

相關文章