在 C++ 中計算一個數字的位數

Jinku Hu 2023年10月12日
  1. 使用 std::to_stringstd::string::size 函式在 C++ 中對數字中的位數進行計數
  2. C++ 中使用 std::string::erasestd::remove_if 方法對數字進行計數
在 C++ 中計算一個數字的位數

本文將演示有關如何計算 C++ 數字位數的多種方法。

使用 std::to_stringstd::string::size 函式在 C++ 中對數字中的位數進行計數

計算數字中位數的最直接方法是將其轉換為 std::string 物件,然後呼叫 std::string 的內建函式以檢索計數數字。在這種情況下,我們實現了一個單獨的模板函式 countDigits,該函式採用單個引數,該引數假定為整數型別,並以整數形式返回大小。請注意,下面的示例為負整數輸出不正確的數字,因為它也計算符號。

#include <iostream>
#include <string>
#include <vector>

using std::cerr;
using std::cout;
using std::endl;
using std::string;
using std::to_string;

template <typename T>
size_t countDigits(T n) {
  string tmp;

  tmp = to_string(n);
  return tmp.size();
}

int main() {
  int num1 = 1234567;
  int num2 = -1234567;

  cout << "number of digits in " << num1 << " = " << countDigits(num1) << endl;
  cout << "number of digits in " << num2 << " = " << countDigits(num2) << endl;

  exit(EXIT_SUCCESS);
}

輸出:

number of digits in 1234567 = 7
number of digits in -1234567 = 8

為了彌補之前實現函式 countDigits 的缺陷,我們將新增一個 if 語句來評估給定數字是否為負,並返回少一的字串大小。請注意,如果數字大於 0,則返回字串大小的原始值,如以下示例程式碼中所實現的。

#include <iostream>
#include <string>
#include <vector>

using std::cerr;
using std::cout;
using std::endl;
using std::string;
using std::to_string;

template <typename T>
size_t countDigits(T n) {
  string tmp;

  tmp = to_string(n);
  if (n < 0) return tmp.size() - 1;
  return tmp.size();
}

int main() {
  int num1 = 1234567;
  int num2 = -1234567;

  cout << "number of digits in " << num1 << " = " << countDigits(num1) << endl;
  cout << "number of digits in " << num2 << " = " << countDigits(num2) << endl;

  exit(EXIT_SUCCESS);
}

輸出:

number of digits in 1234567 = 7
number of digits in -1234567 = 7

C++ 中使用 std::string::erasestd::remove_if 方法對數字進行計數

前面的示例為上述問題提供了完全足夠的解決方案,但是可以使用 std::string::erasestd::remove_if 函式組合對 countDigits 進行過度設計,以刪除所有非數字符號。還要注意,此方法後續可用來實現可與浮點值一起使用的函式。請注意,以下示例程式碼與浮點值不相容。

#include <iostream>
#include <string>
#include <vector>

using std::cerr;
using std::cout;
using std::endl;
using std::string;
using std::to_string;

template <typename T>
size_t countDigits(T n) {
  string tmp;

  tmp = to_string(n);
  tmp.erase(std::remove_if(tmp.begin(), tmp.end(), ispunct), tmp.end());
  return tmp.size();
}

int main() {
  int num1 = 1234567;
  int num2 = -1234567;

  cout << "number of digits in " << num1 << " = " << countDigits(num1) << endl;
  cout << "number of digits in " << num2 << " = " << countDigits(num2) << endl;

  exit(EXIT_SUCCESS);
}

輸出:

number of digits in 1234567 = 7
number of digits in -1234567 = 7
作者: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

DelftStack.com 創辦人。Jinku 在機器人和汽車行業工作了8多年。他在自動測試、遠端測試及從耐久性測試中創建報告時磨練了自己的程式設計技能。他擁有電氣/ 電子工程背景,但他也擴展了自己的興趣到嵌入式電子、嵌入式程式設計以及前端和後端程式設計。

LinkedIn Facebook

相關文章 - C++ Integer